private void button1_Click(object sender, RoutedEventArgs e)
{
new Thread(delegate() { doTest(); }).Start();
}
当主窗口中包含 doTest() 时,如下所示,我的文本框正在从线程更新,我可以看到文本框值发生变化(因此从线程更新值正在工作。
public void doTest()
{
int count = 20;
while (count < 30)
{
Dispatcher.Invoke(new Action(() => txtBoxLog.Text = count.ToString()), null);
count++;
Thread.Sleep(500);
}
}
但是,如果我删除上面的代码并创建单独的类,放置在主窗口类之外,从线程更新我的文本框失败并且我没有收到任何错误但根本没有改变它的值,我使用调度程序从线程更新不是更新 .
从 doTest() 类访问主窗口我创建了内部静态主 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);
}
}
}
请帮助我确定我在这里出错的地方..