BeginInvoke выдает исключение - PullRequest
       10

BeginInvoke выдает исключение

9 голосов
/ 18 февраля 2010

У меня следующая проблема. FindRoot на самом деле находится в сторонней DLL, и я не имею над ним контроля. Он должен вызываться через Begin invoke . Иногда метод FindRoot вызывает исключение. Это приводит к краху всего моего приложения. Теперь, как предотвратить сбой приложения, даже если FindRoot выдает исключение.

delegate void AddRoot(double number);
public static void FindRoot(double number)
{
    throw new Exception();/// sometimes is thrown.

}

static void back_DoWork(object sender, DoWorkEventArgs e)
{
    AddRoot root = FindRoot;
    root.BeginInvoke(12.0, root.EndInvoke, root);

}

Ответы [ 2 ]

8 голосов
/ 18 февраля 2010

Используйте обратный вызов вместо прямого вызова 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);
    }
}

Кстати: мне кажется, что вы уже вызываете этот код из фонового потока. Запуск еще одного потока для запуска FindRoot () выглядит странно.

3 голосов
/ 18 февраля 2010

На самом деле исключение перехватывается и перебрасывается при вызове EndInvoke, поэтому, чтобы перехватить его, вам нужно использовать попытку при вызове EndInvoke.

Вы можете найти эту статью полезной http://msdn.microsoft.com/en-us/magazine/cc163467.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...