私は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を実行するにはどうすればよいですか?
元の投稿の回答が見つかりませんでした –
@dotctor質問を再開できますか? –
おそらく、フォームを必要な 'IWin32Window'インターフェース、つまり' dlg.ShowDialog((IWin32Window)ProgramApp.MainForm); 'にキャストするだけで十分でしょう。それはUI要素を持たないからです。 – stuartd