2012-01-28 64 views
0

我在調用應用程序主線程中的某些圖形方法時遇到問題。我使用SlimDX在我的窗口控件中呈現。要使用表格Invoke在主線程中執行圖形代碼。通常這個工作沒有任何問題,但有時(沒有固定的時間間隔)應用程序凍結,調試器告訴我應用程序處於等待狀態。應用程序在永久等待中調用

的代碼是如下:(a System.Windows.Forms.Fom)使用SlimDXs MessagePump.Run運行

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

的窗口。

我看過其他貼子,其中Dispatcher.Run建議,但實際上只是阻止整個線程不運行任何渲染。

該行爲的原因是什麼?

感謝和問候

+3

你的'if'和'else'子句看起來應該是相反的 – BrokenGlass 2012-01-28 23:26:44

+0

有點令人尷尬。刪除我自己的實現使用System.Windows.Threading.Dispatcher和使用Form.Invoke我插入那個小東西作爲一個新的錯誤...到目前爲止,它似乎與反轉如果。它遲到了...... – Muepe 2012-01-28 23:38:08

回答

0

在這種情況下,答案只是倒轉的if語句。

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