Обработчик исключений не вызывается - PullRequest
0 голосов
/ 30 октября 2011

Запустив очень простую программу, описанную ниже, я ожидаю, что «FILTER REACHED» выполнится, когда я нажму кнопку 1, но она не будет нажата (ни с отладчиком, ни без него).Есть идеи ...?

public partial class Window1 : Window
{
    public Window1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        new Thread(() =>
            {
                Dispatcher.CurrentDispatcher.UnhandledExceptionFilter += Dispatcher_UnhandledExceptionFilter;
                doer();
            }).Start();
    }
    void Dispatcher_UnhandledExceptionFilter(
        object sender,
        DispatcherUnhandledExceptionFilterEventArgs e)
    {
        MessageBox.Show("FILTER REACHED");
    }


    private void doer()
    {
        throw new NotImplementedException();
    }
}

Спасибо

Ответы [ 4 ]

1 голос
/ 30 октября 2011

В соответствии с документацией по Dispatcher (найдено здесь ) похоже, что функция фильтра будет использоваться только в том случае, если для методов Invoke или BeginInvoke в * выдано неперехваченное исключение.1006 *.

Так что же произойдет, если вы замените doer() на Dispatcher.CurrentDispatcher.Invoke(doer) (или аналогичный) вместо этого?

0 голосов
/ 30 октября 2011

Вы пытались использовать AppDomain.UnhandledException вместо?

0 голосов
/ 30 октября 2011

попробуйте ниже код

    new Thread(() =>
    {
       Dispatcher.CurrentDispatcher.UnhandledExceptionFilter += Dispatcher_UnhandledExceptionFilter;
       Dispatcher.CurrentDispatcher.Invoke(DispatcherPriority.Normal, new ThreadStart(delegate
       {
           doer();
       }));
    }).Start();
0 голосов
/ 30 октября 2011

Вы вызываете метод (doer) из потока, который не является потоком диспетчера. Вы должны вызвать метод с помощью Dispatcher, чтобы перехватить исключение для фильтрации.

 new Thread(() =>
            {
                Dispatcher.CurrentDispatcher.UnhandledExceptionFilter += Dispatcher_UnhandledExceptionFilter;
                 Dispatcher.Invoke(new Action(()=>doer()));
            }).Start();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...