2016-10-18 19 views
0

私はC#アプリケーションを開発中です。ShowDialogのInvalidOperationException

私は、ダイアログボックスのように使用されるオブジェクトがあります。

public partial class MyDialog : Form 

メインウィンドウには、次のとおりです。

public class MyForm : Form 

私はでそれを使用することができます:私は1つの機能では

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

両方とも使用できます:

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

最初の呼び出しは良い動作しますが、二番目に、私はHRESULT = 0x80131509とメッセージとSystem.InvalidOperationExceptionがあります

クロススレッド操作を無効:他の のスレッドからアクセスコントロール「MainFormを」それが作成されたスレッドよりも優先されます。

(フランス語、オリジナルのメッセージ:)

「オペレーション間のスレッド非ヴァリデから翻訳:ルcontrôle 'のMainForm' faitがL'オブジェD'UN ACCESàpartir D'UNスレッド自動応答クライアント lequel il aétécréé。 "

これを修正するにはどうすればよいですか?

編集:両方が偽である

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

初の試み:

は、私は、コードのこの部分を追加しました。次に、needInvokeFormはtrueです。 ProgramApp.MainFormをパラメータとして設定するためにInvokeを実行するにはどうすればよいですか?

+1

元の投稿の回答が見つかりませんでした –

+1

@dotctor質問を再開できますか? –

+1

おそらく、フォームを必要な 'IWin32Window'インターフェース、つまり' dlg.ShowDialog((IWin32Window)ProgramApp.MainForm); 'にキャストするだけで十分でしょう。それはUI要素を持たないからです。 – stuartd

答えて

1

ダイアログは、UIスレッドで呼び出す必要があります。

詳しくは、this postを参照してください。

関連する問題