基本问题: 我启动一个线程,该线程在创建时从WPF元素读取。之后,除了在MainWindow.xaml.cs中只是一个普通布尔变量之外,我再也不会写或读取任何元素了。
我阅读了有关将线程声明为后台线程或以某种方式从该线程分派UI的信息。两者都不起作用,我想我做错了。
我知道这会产生无限的外观,应该这样。我想无限地运行它,直到我按下停止按钮。
无论如何,这是我的代码受到打击,也许您可以向我展示如何正确解决此问题:
private void StartButton_Click(object sender, RoutedEventArgs e)
{
t = new Thread(() => this.Dispatcher.Invoke(() =>
{
ThreadMethod(UserText.Text, PasswordPass.Password, IPText.Text, time * 60000); //time*60000 = minute to milliseconds
}));
UserText.IsEnabled = false;
PasswordPass.IsEnabled = false;
IPText.IsEnabled = false;
TimeSilder.IsEnabled = false;
StartButton.IsEnabled = false;
StopButton.IsEnabled = true;
keepRunning = true;
t.Start();
}
private void StopButton_Click(object sender, RoutedEventArgs e)
{
try
{
t.Join();
}
catch
{
Console.WriteLine("Threadschließen nicht durchgeführt");
}
UserText.IsEnabled = true;
PasswordPass.IsEnabled = true;
IPText.IsEnabled = true;
TimeSilder.IsEnabled = true;
StartButton.IsEnabled = true;
StopButton.IsEnabled = false;
keepRunning = false;
}
private void ThreadMethod(string userName, string password, string mqttIP, int timer)
{
//recieveData(userName, password);
//sendData(mqttIP);
Console.WriteLine("Thread is running");
Thread.Sleep(timer);
if (keepRunning)
{
t = new Thread(() => this.Dispatcher.Invoke(() =>
{
ThreadMethod(userName, password, mqttIP, timer);
}));
t.Start();
}
}
当我不启动线程时,一切都会很好。
感谢您的帮助!