Я недавно сделал сообщение об этом, но я думаю, что мой последний вопрос не был хорошо написан, и я получил ответ, но я хочу видеть, есть ли более простое решение, поскольку я нашел последний, сбивающий с толку.На этот раз я попытался написать это как можно более ясно.
У меня есть следующий код для приложения 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 обновлялся при выполнении test ()?
С уважением!
РЕДАКТИРОВАТЬ
Спасибоза ваши ответы, но я пока не смог заставить его работать.
Это сетевое приложение, поэтому я думаю, что текстовое поле будет более подходящим, чем привязка данных, так как я хочу печатать тайм-ауты, пинги и многое другоеинформация в программе, чтобы убедиться, что все идет по плану.
Я попробовал некоторые из ваших ответов, но не смог заставить его работать.Это последний пример, который я пробовал, и он не работает
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);
}