我有一个非UI线程,需要在其上发送消息。

通常的方法是在我线程的线程proc中调用Dispatcher.Run()

我想对此进行修改,使其对未处理的异常更加健壮。

我的第一个切入点是:

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


此代码有效,并允许调度程序在发生异常后继续泵送消息。

有人知道这种方法有潜在的问题吗?

最佳答案

我发现在与ui线程一起使用dispatcherframe时可能会遇到一些问题-例如焦点问题-我认为您的情况会很好。

您是否尝试过以下方法:

Application.DispatcherUnhandledException

要么

Dispatcher.UnhandledException

您也可以尝试将其设置为Handled = true以使其继续。

关于wpf - Dispatcher.Run与Dispatcher.PushFrame,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5697667/

10-11 08:10