メッセージループしている中で、フォームを開きたいのですが、1回目開くのには成功しても2回目以降で失敗します。失敗すると、例外System.InvalidOperationExceptionが発生します。スレッドセーフで開いているつもりですが、うまくいきません。
ソースは以下のような構成となっています。
/// <summary>コンストラクタ</summary> public MainControl() { showChildFormThread(); } private void showChildFormThread() { Task.Factory.StartNew(async () => await showChildForm(childFormTokenSource.Token)); } private async Task showChildForm(CancellationToken Token = default(CancellationToken)) { while (!Token.IsCancellationRequested) { try { switch (startupScreen) { case StartupScreen.Message: ///別のフォームを開く break ; case StartupScreen.CrtMessage: Task.Factory.StartNew(() => { frmCrtMsg frmChildC = new frmCrtMsg(stUID); Application.Run(frmChildC); } break; case StartupScreen.DspMessage: ///別のフォームを開く break ; } } } } } コード
別のメゾッドにて、メッセージが作成されてStartupScreen.CrtMessageを受け取り、受け取ったメッセージに従って、frmCrtMsgを開いています。Task.Factory.StartNewとしているのは、同じフォームを複数開くのを認めているためです。
上記のように他のメッセージでも同じようにフォームを開いていますが、StartupScreen.CrtMessageを受け取って表示するフォームだけ、2回目に受けって表示すると、例外system.InvalidOperationExceptionが発生してフォームが表示されません。
原因として調べる方法などがありましたらばご教授お願いします。
なお、利用している.Net framework 4.5.2,VSは2015です。よろしくお願いします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/08/24 23:33
2018/08/25 03:23
2018/08/25 09:55
2018/08/25 12:10
2018/08/27 08:40