BeginInvoke throws exception

后端 未结 2 678
别跟我提以往
别跟我提以往 2020-12-16 21:00

I have the following problem. FindRoot is actually in a third party dll and I do not have control over it. It has to be called via Begin invoke. Sometimes,

相关标签:
2条回答
  • 2020-12-16 21:45

    Actually the exception is caught and re-thrown when you call EndInvoke, so to catch it you need to use try around your call to EndInvoke.

    You may find this article useful http://msdn.microsoft.com/en-us/magazine/cc163467.aspx

    0 讨论(0)
  • 2020-12-16 21:57

    Use a callback instead of directly calling EndInvoke:

    using System.Runtime.Remoting.Messaging;
    ...
    static void back_DoWork() 
    {
        AddRoot root = FindRoot;
        root.BeginInvoke(12.0, new AsyncCallback(callback), root);
    }
    
    static void callback(IAsyncResult result) 
    {
        AddRoot dlg = (AddRoot)(((AsyncResult)result).AsyncDelegate);
    
        try 
        {
            dlg.EndInvoke(result);
        }
        catch (Exception ex) 
        {
            Console.WriteLine(ex.Message);
        }
    }
    

    Btw: it looks to me like you are already calling this code from a background thread. Starting yet another thread to run FindRoot() looks strange.

    0 讨论(0)
提交回复
热议问题