Dispatcher.Run vs Dispatcher.PushFrame - PullRequest
       13

Dispatcher.Run vs Dispatcher.PushFrame

3 голосов
/ 18 апреля 2011

У меня есть не-пользовательский поток, который мне нужно прокачать сообщения.

Обычный способ сделать это - вызов Dispatcher.Run() в proc моего потока.

Я бы хотел изменить это, чтобы сделать его более устойчивым в отношении необработанных исключений.

Мой первый разрез:

   for (;;)
    {
        var frame = new DispatcherFrame();
        try
        {
            Dispatcher.PushFrame(frame);
            break;
        }
        catch (Exception e)
        {
            frame.Continue = false;
            Log("ThreadProc caught exception:\n{0}", e);
        }
    }

Этот код работает и позволяет диспетчеру продолжать отправку сообщений после исключения.

Кто-нибудь знает о возможных проблемах с этим подходом?

1 Ответ

0 голосов
/ 18 апреля 2011

Я считаю, что использование диспетчера может вызвать некоторые проблемы при использовании его с потоком пользовательского интерфейса - например, проблемы с фокусом - я думаю, что ваш сценарий будет в порядке.

Вы пытались поймать его с помощью:

Application.DispatcherUnhandledException

или

Dispatcher.UnhandledException

Вы также можете попробовать это и установить Handled = true, чтобы продолжить.

...