检查控制是否需要调用的函数中的 InvalidAsynchronousStateException

发布于 2024-10-01 00:31:56 字数 597 浏览 4 评论 0原文

我使用 Stack Overflow 用户提供的这个函数来更新来自 BackgroundWorker 的控件。

static void SynchronizedInvoke(ISynchronizeInvoke sync, Action action)
{
    // If the invoke is not required, then invoke here and get out.
    if (!sync.InvokeRequired)
    {
        // Execute action.
        action();

        // Get out.
        return;
    }

    // Marshal to the required thread.
    sync.Invoke(action, new object[] { });
}

到目前为止,该功能一直运行良好。我刚刚收到此异常:

InvalidAsynchronousStateException

这是什么意思以及如何防止它?

I use this function courtesy of a Stack Overflow user to update controls from a BackgroundWorker.

static void SynchronizedInvoke(ISynchronizeInvoke sync, Action action)
{
    // If the invoke is not required, then invoke here and get out.
    if (!sync.InvokeRequired)
    {
        // Execute action.
        action();

        // Get out.
        return;
    }

    // Marshal to the required thread.
    sync.Invoke(action, new object[] { });
}

This function has worked perfectly until now. I just got this exception:

InvalidAsynchronousStateException

What does this mean and how do I prevent it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

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

发布评论

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

评论(1

笙痞 2024-10-08 00:31:56

这里的问题是 ISynchronizeInvoke 对象绑定到的线程不再存在。例如,如果您生成后台线程并且 UI 线程在后台任务完成之前退出,则可能会发生这种情况。该线程不再存在,因此没有任何东西可以调用,并且您会得到异常。

没有什么好的方法可以防止这种情况发生。最好的做法是将 Invoke 调用包装在处理此异常的 try / catch 中。

The problem here is that the thread to which the ISynchronizeInvoke object was bound to no longer exists. This can happen for example if you spawn a background thread and the UI thread exits before the background task completes. The thread no longer exists hence there's nothing to invoke to and you get the exception.

There is no good way to prevent this. The best course of action is to wrap the Invoke call in a try / catch which handles this exception.

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