Dispatcher.Run 与 Dispatcher.PushFrame

发布于 2024-11-01 19:13:35 字数 516 浏览 0 评论 0原文

我有一个非用户界面线程,我需要在其上发送消息。

执行此操作的正常方法是在我的线程的线程过程中调用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

捂风挽笑 2024-11-08 19:13:35

我发现使用 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文