【问题标题】:Application in permanent wait on Invoke永久等待调用中的应用程序
【发布时间】:2012-01-29 07:39:10
【问题描述】:

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

代码如下:

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

窗口(@98​​7654323@)使用 SlimDXs MessagePump.Run 运行。

我看过其他建议 Dispatcher.Run 的帖子,但实际上只是阻塞了整个线程而不运行任何渲染。

这种行为的原因是什么?

感谢和问候

【问题讨论】:

  • 您的 ifelse 子句似乎应该颠倒过来
  • 有点尴尬。在使用 System.Windows.Threading.Dispatcher 并使用 Form.Invoke 删除我自己的实现后,我将那个小东西作为一个新错误插入......到目前为止,它似乎可以与反向 if 一起使用。来晚了……

标签: c# .net slimdx


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-04
    • 2014-11-30
    • 1970-01-01
    • 1970-01-01
    • 2011-08-21
    • 2020-01-04
    相关资源
    最近更新 更多