他の最近の研究では、Winフォームプロジェクトの開発を使用して並列に複数のスレッド作成し、他のスレッドの使用を制御する必要がある場合があり、またはデリゲートとイベントの他の、より多くの使用の形で情報の一部(等テキストボックス、ボタンのクリック、内容)を使用する必要がありますので、私は簡単な例レコードそれを書きました。
デリゲートを使用するには、最初にすべての私は宣言する必要があります
// デリゲート宣言 プライベート デリゲート 空隙 TestDelegate(文字列; addText、リッチテキストボックスTEMP) // デリゲート変数 プライベート TestDelegateテスト{ GET、SETを ;}
それはマルチスレッドで使用されているので、そのスレッド内でメソッド呼び出しデリゲートデリゲートの文を書きます
// 调用委托 プライベート ボイド InvokeDelegate(ストリングaddText、リッチテキストボックスTEMP) { 場合(TEMP =!ヌル && temp.InvokeRequired) { temp.BeginInvoke(この .TEST、新しい オブジェクト[] {addText、TEMP})。 } }
別のスレッドと、デリゲートの呼び出しに就役変数のインスタンス化
テスト= 新しいTestDelegate(AddText)。 InvokeDelegate(_addText、_tempRichTextBox)。 プライベート ボイド AddText(ストリングaddText、リッチテキストボックスTEMP) { temp.Text + = addText + " \ R \ n " 。 }
上記の使用を制御するために複数のスレッドの手数料の使用の簡単な例であります
そして、コントロール間メッセージングのためのイベントを見て
最初のデリゲートとイベントで
// デリゲート パブリック デリゲート 無効 DelegateTest(文字列テキスト); // イベント パブリック イベント DelegateTest AddTextEventを。
メッセージングのための希望の位置INVOKE(リリースイベント)を実施
AddTextEvent .Invoke(テキスト);?
コールイベントで(イベントサブスクリプション)
EventTestら= 新しいEventTest()。 et.AddTextEvent + = 新しいEventTest.DelegateTest(Et_AddTextEvent)。 プライベート ボイド Et_AddTextEvent(文字列テキスト) { この .testRichTextBox.Text + =テキスト+ " \ R \ n " 。 }
購読モデル- C#のイベントは、主に公開を使用して、スレッド間メッセージング(通信)のために使用されます。イベントイベントは、クラスで呼び出されるイベントを公開するイベントを含むクラス、宣言出版社、出版社のクラスイベントの他のクラスを受けてイベントをサブスクライブすることで、呼ばれる、加入者のためにアップし、サブスクリプションクラスを。
これらは、スレッド間の通信にWinフォームにデリゲートとイベントの使用例です。
GitHubの上のコードのフルバージョン:https://github.com/hhhhhaleyLi/DelegateTest