Dispatcher.Run 与 Dispatcher.PushFrame
我有一个非用户界面线程,我需要在其上发送消息。
执行此操作的正常方法是在我的线程的线程过程中调用 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);
}
}
此代码有效,并允许调度程序在异常后继续泵送消息。
有谁知道这种方法有任何潜在的问题吗?
I have a non-ui thread that I need to pump messages on.
The normal way to do this would involve a call Dispatcher.Run()
in the thread proc of my thread.
I'd like to modify this to make it more robust with regard to unhandled exceptions.
My first cut is:
for (;;)
{
var frame = new DispatcherFrame();
try
{
Dispatcher.PushFrame(frame);
break;
}
catch (Exception e)
{
frame.Continue = false;
Log("ThreadProc caught exception:\n{0}", e);
}
}
This code works and allows the dispatcher to continue pumping messages after an exception.
Does anyone know of any potential problems with this approach?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我发现使用 DispatcherFrame 与 ui 线程一起使用时可能会出现一些问题 - 例如焦点问题 - 我认为你的场景会很好。
您是否尝试使用以下方式捕获它:
Application.DispatcherUnhandledException
或
Dispatcher.UnhandledException
您也可以尝试并设置 Handled=true 以使其继续。
I find using a dispatcherframe can give some problems when using it with a ui thread - for example problems with focus - I think your scenario will be fine.
Have you tried catching it with:
Application.DispatcherUnhandledException
or
Dispatcher.UnhandledException
You could also try that and set Handled=true to make it continue.