|
分類:[.NET 全般]
失礼します。どうしてもわからないので質問させていただきます。
現在、あるライブラリを作っています。
そのライブラリ(クラス)は新しいスレッドを持っておりそのスレッドの中で文字列が引数のイベントが起こされます。
そのイベントをライブラリを使用しているフォームで処理したいのですが、フォーム側で引数を触ろうとすると
「有効ではないスレッド間の操作」となってしまい、処理することができません。
どのようにすればいいのでしょうか?
デリゲートとinvokeを使うのかとか考えたのですがよく分かりませんでした。
どなたかわかるからがいらっしゃいましたらご教授ください。よろしくお願いいたします。
同じことを再現したサンプルソースを載せておきます。
[Form1側]
Class1 testclass = new Class1();
private void Form1_Load(object sender, EventArgs e)
{
//Class1にイベントを起こしてもらう
testclass.testevent += new Class1.testdelegate(testclass_testevent);
testclass.Event();
}
void testclass_testevent(string str)
{
//cぁss1で起こされたイベント
//イベントの引数をフォームのタイトルに表示する
//ここでエラー
this.Text = str;
}
[class1側]
//イベントの作成
public delegate void testdelegate(string str);
public event testdelegate testevent;
public void Event()
{
//新しいスレッドを作成
System.Threading.Thread testthread = new System.Threading.Thread(thread);
testthread.Start();
}
private void thread()
{
//新しいスレッド内でイベントを起こす
//これでフォームのタイトルにテストですと表示されてほしい
testevent("テストです");
}
|