我创建了一个小的wpf窗口应用程序。 MainWindow
有一个按钮,当按下该按钮时,将创建一个线程并开始执行该线程。以下是我的xaml代码:
<Window x:Class="Tester.MainWindow"
...
Title="MainWindow" Height="150" Width="300" Closed="OnWindowclose">
<Grid>
<Button Content="Start" HorizontalAlignment="Left" Margin="42,47,0,0" VerticalAlignment="Top" Width="75" Click="Start_Click"/>
</Grid>
这是我的.cs代码的样子:
public partial class MainWindow : Window
{
private Thread t1;
public MainWindow()
{
InitializeComponent();
}
private void OnWindowclose(object sender, EventArgs e)
{
System.Windows.Application.Current.Shutdown();
}
private void Start_Click(object sender, RoutedEventArgs e)
{
move = true;
t1 = new System.Threading.Thread(KeepMoving);
t1.Start();
}
private void KeepMoving()
{
// my code
}
}
现在,我的问题是当我使用其关闭按钮关闭MainWindow
时。我仍然可以看到该应用程序尚未停止。在阅读了一些stackoverflow帖子之后,我尝试了一些方法,并创建了一个事件OnWindowClose
并称为应用程序关闭。但这似乎并没有达到预期效果。
我不想调用Thread.Abort(),因为它会引发异常,论坛建议不要这样做。这个post似乎与我要实现的目标相似,但是仍然没有得到如何使用它来关闭窗口中的线程的信息。
我对线程还很陌生,所以不确定如何解决该问题。任何帮助,将不胜感激。
谢谢。
答案 0 :(得分:0)
使所有线程在后台运行
t1 = new System.Threading.Thread(KeepMoving);
t1.IsBackground = true;
t1.Start();
将环境关闭添加到表单关闭
Environment.Exit(Environment.ExitCode);
完整代码
public partial class MainWindow : Window
{
private Thread t1;
public MainWindow()
{
InitializeComponent();
}
private void OnWindowclose(object sender, EventArgs e)
{
Environment.Exit(Environment.ExitCode); // Prevent memory leak
// System.Windows.Application.Current.Shutdown(); // Not sure if needed
}
private void Start_Click(object sender, RoutedEventArgs e)
{
move = true;
t1 = new System.Threading.Thread(KeepMoving);
t1.IsBackground = true; // Run in background
t1.Start();
}
private void KeepMoving()
{
// my code
}
}