スポンサーリンク
スポンサーリンク

「有効ではないスレッド間の操作: コントロールが作成されたスレッド以外のスレッドからコントロール がアクセスされました。」Exceptionの対処(Windowsフォーム)

.NET CoreC#Windowsフォームアプリ

Windowsフォームアプリでは、Task.Run()など別スレッドから、メインスレッドのフォームコントールを操作すると、「System.InvalidOperationException: ‘有効ではないスレッド間の操作: コントロールが作成されたスレッド以外のスレッドからコントロール がアクセスされました。’」Exceptionが発生しますが、Invoke()を通すことで解消します。

Invoke()を通すことで解消します。

ソースコードはGitHubで公開しています。

 

ソースコード構成

今回使った Visual Studio プロジェクト テンプレートは、Visual Studio 2022 + .NET 6.0 の Windowsフォームアプリです。

テンプレートに対して、下記の処理を加えました。

 

ソースコード変更内容を解説

3パターンの実装で、テキストボックスに値を設定するボタンを3つ追加。
・button1は、メインスレッドからメインスレッドへ値を設定し、正常終了。
・button2は、別スレッドからメインスレッドへ値を設定し、Exception発生
・button3は、別スレッドからメインスレッドへ Invokeを通して値を設定し、正常終了。

 

/Form1.cs

コメント

タイトルとURLをコピーしました