我最近发表了一篇关于此的文章,但我认为我的最后一个问题没有写得很好,我确实得到了答案,但我想看看是否有更简单的解决方案,因为我发现最后一个问题令人困惑。这次我试图尽可能清楚地写出它。新线程打开新窗口,如何在新窗口中更新文本框?
我这里WPF应用程序下面的代码是代码MainWindow.xaml.cs
public MainWindow()
{
InitializeComponent();
}
private void button1_Click(object sender, RoutedEventArgs e)
{
Thread[] threads = new Thread[3];
for (int i = 0; i < 3; i++)
{
int index = i;
threads[i] = new Thread(new ThreadStart(test));
threads[i].SetApartmentState(ApartmentState.STA);
threads[i].IsBackground = true;
threads[i].Start();
}
}
public void test()
{
OutputWindow outputwindow = new OutputWindow();
outputwindow.Show();
System.Windows.Threading.Dispatcher.Run();
outputwindow.textBox1.Text = "writing";
//some more stuff done
//some more stuff done
//some more stuff done
outputwindow.textBox1.Text = "\nmore writing";
//some more stuff done
//some more stuff done
//some more stuff done
outputwindow.textBox1.Text = "\nmore writing";
}
我怎样才能让textBox1.Text真正得到更新测试()是
代码正在执行?
问候!
编辑
谢谢您的回答,但我无法使它工作还没有。
这是一个网络应用程序,所以我认为文本框比数据绑定更合适,因为我想在整个程序中打印超时,ping和更多信息,以确保一切按计划进行。
我试了一些你的答案,但我无法让它工作。这是我试过的最后一个例子,它不起作用
public MainWindow()
{
InitializeComponent();
}
private void button1_Click(object sender, RoutedEventArgs e)
{
Thread[] threads = new Thread[3];
for (int i = 0; i < 3; i++)
{
int index = i;
threads[i] = new Thread(new ThreadStart(test));
threads[i].SetApartmentState(ApartmentState.STA);
threads[i].IsBackground = true;
threads[i].Start();
}
}
public void test()
{
OutputWindow outputwindow = new OutputWindow();
outputwindow.Show();
System.Windows.Threading.Dispatcher.Run();
outputwindow.textBox1.Text = "writing";
//some more stuff done
//some more stuff done
//some more stuff done
outputwindow.textBox1.Text = "\nmore writing";
//some more stuff done
//some more stuff done
//some more stuff done
Action action =() => outputwindow.textBox1.Text = "\nmore writing";
Dispatcher.Invoke(action);
}
欣赏它。非常感谢。 – Arya
有没有办法在窗户关闭时使工作方法停止工作?现在我每秒用一次无限循环尝试使用Console.beep(),即使关闭窗口,我仍然可以听到蜂鸣声。 – Arya
我开始使用制表符,它运行得更好 – Arya