应用程序在Invoke上处于永久等待状态

本文关键字:于永久 等待状态 Invoke 应用程序 | 更新日期: 2023-09-27 18:21:58

我在应用程序的主线程中调用一些图形方法时遇到问题。我正在使用SlimDX在窗口的控件中进行渲染。使用形式Invoke在主线程im中执行图形代码。通常这不会有任何问题,但有时(没有固定的时间间隔)应用程序冻结,调试器告诉我应用程序处于等待状态。

代码如下:

public void CallOnThread(Action action)
{
    if (mWindow.InvokeRequired)
        action();
    else
        mWindow.Invoke(action);
}

窗口(System.Windows.Forms.Fom)使用SlimDXs MessagePump.Run运行。

我看到过其他帖子中建议使用Dispatcher.Run,但这实际上只是阻止了整个线程不运行任何渲染。

这种行为的原因是什么?

感谢和问候

应用程序在Invoke上处于永久等待状态

在这种情况下,答案只是倒置的if语句。

public void CallOnThread(Action action)
{
    if (!mWindow.InvokeRequired)
        action();
    else
        mWindow.Invoke(action);
}