private void button1_Click(object sender, RoutedEventArgs e)
{
new Thread(delegate() { doTest(); }).Start();
}
以下のように、mainwindow に doTest() が含まれていると、テキスト ボックスがスレッドから更新され、テキスト ボックスの値が変更されていることがわかります (したがって、スレッドからの値の更新が機能しています。
public void doTest()
{
int count = 20;
while (count < 30)
{
Dispatcher.Invoke(new Action(() => txtBoxLog.Text = count.ToString()), null);
count++;
Thread.Sleep(500);
}
}
しかし、上記のコードを削除して別のクラスを作成し、メインウィンドウクラスの外に配置すると、スレッドからのテキストボックスの更新が失敗し、エラーは発生しませんが、単にその値を変更しないため、ディスパッチャーを使用してスレッドから更新しません更新中。
doTest() クラスから mainwindow にアクセスするには、内部静的 main winodwo calss tw を作成しました
internal static MainWindow tw;
そして今、私のdoTest()メソッドはclsTest.csファイルに次のコードを持っています
internal class clsTest
{
public clsTest() { }
public void doTest()
{
int count = 20;
while (count < 30)
{
MainWindow.tw.Dispatcher.Invoke(
new Action(() => MainWindow.tw.txtLog.Text = count.ToString()), DispatcherPriority.Background, null);
count++;
Thread.Sleep(500);
}
}
}
ここでどこが間違っているのかを特定するのを手伝ってください..