GUI が別のスレッドを実行している間に 1 つのスレッドで実行されるループを持つメソッドで画像ファイルを処理するプログラムがあります。処理中に、処理が行われたメソッドから GUI に進行状況を報告したいと思います。
これは私が持っているものです。他の Windows フォーム クラスによって継承される GUI イベントを持つ基本 Windows フォーム クラス。さらに、他のクラスに継承されるメソッドとプロパティを持つ基本クラス。他のクラスは、アプリに移行するさまざまな画像管理アプリの画像形式を表します。そのため、ドロップダウン メニューから別のアプリ名を選択するだけで、画像ソースを選択できる適切な GUI が開きます。
- ボタンのクリックやラベル テキストなどのすべての GUI イベントを含む部分 ClassA。
- ClassAを継承した部分ClassA2。
- 仮想メソッドを含む抽象 ClassB 。さらに、進行状況をラベルに報告するために使用したいプロパティ。
- ClassB を継承し、継承したクラスのメソッドとプロパティを使用する ClassB2。メソッドは ClassB でオーバーライドされます
- オブジェクト ClassB は ClassA で宣言され、ClassA2 で ClassB2 に初期化されます。
- ボタンクリックイベントのClassAでは、ファイルを処理するオーバーライドされたメソッドをラップするデリゲートパラメーターを含むEventHandlerでDoWorkイベントを発生させるBackGroundWorkerオブジェクトを使用します。私はここで解決策を得 ました 新しいスレッドで簡単なコードを実行するにはどうすればよいですか?
メソッドには、ループが通過するたびに新しい値が割り当てられるプロパティが含まれています。ループが通過して変更されるたびに、その値を取得して GUI に表示したいと思います。
いくつかの解決策を使用しようとしましたが、例外ウィンドウ ハンドルが作成されませんでした。 C#で別のスレッドからGUIを更新するには?
string newText = "abc";
this.Invoke((MethodInvoker)delegate {
someLabel.Text = newText;
});
また、これを試しましたが、 InvokeRequired プロパティは FALSE 値を返します
http://www.codeproject.com/Articles/52752/Updating-Your-Form-from-Another-Thread-without-Cre