Dispatcher.Run与Dispatcher.PushFrame的区别

3

我有一个非UI线程,需要在上面进行消息泵。

通常的方法是在我的线程过程中调用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);
        }
    }

这段代码可以正常运行,并且在出现异常后允许调度程序继续传递消息。

有没有人知道这种方法可能存在的问题?

1个回答

0

我发现在使用调度框架与UI线程一起使用时可能会出现一些问题,例如焦点问题。但我认为你的情况应该没问题。

你尝试过用以下方式捕获它吗:

Application.DispatcherUnhandledException

或者

Dispatcher.UnhandledException

你也可以尝试这样做,并设置Handled=true以使其继续执行。


顶级异常通知器的问题在于,到我们处理异常时,辅助线程上的调度器似乎已经失效。 - LukeN

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接