2016-10-18 40 views
0

我正在研究C#應用程序。ShowDialog上的InvalidOperationException

我有使用象一個對話框的對象:

public partial class MyDialog : Form 

的主窗口是:

public class ProgramApp 
{ 
    public static MyForm MainForm { get { return _mainForm; } } 
} 

在一個函數I:

public class MyForm : Form 

我可以由使用它可以同時使用:

MyDialog dlg = new MyDialog(); 
dlg.ShowDialog(ProgramApp.MainForm); 

首先調用工作良好,但在第二個我有HResult的= 0x80131509和消息的System.InvalidOperationException:

跨線程操作無效:控制「的MainForm」從其他一個 線程訪問而不是它創建的線程。

(從法語,原始消息:)翻譯

「的操作跨線程非的Valide:LE CONTROLE 'MainForm的' 一個 既成事實L'客體D'未ACCESàpartir D'未螺紋autre que celui sur lequel il aétécréé。「

我該怎麼做才能解決這個問題?

編輯:

我加了這段代碼:

MyDialog dlg = new MyDialog(); 
bool needInvokeDlg = dlg.InvokeRequired; 
bool needInvokeForm = ProgramApp.MainForm.InvokeRequired; 
dlg.ShowDialog(ProgramApp.MainForm); 

第一次嘗試都是假的。第二,needInvokeForm是真的。我怎樣才能做一個調用將ProgramApp.MainForm設置爲參數?

+1

在原貼上找不到答案 –

+1

@dotctor你能重新打開這個問題嗎? –

+1

也許只是將表單轉換爲所需的'IWin32Window'接口,即'dlg.ShowDialog((IWin32Window)ProgramApp.MainForm)',因爲它沒有任何UI元素。 – stuartd

回答

1

該對話框需要在UI線程上調用。

有關詳細的討論,請參閱this post

相關問題