【发布时间】:2019-07-02 19:58:05
【问题描述】:
我制作了一个带有进度条的 WPF 应用程序。进度条的值在函数“Background_Work”的“while”循环中更新为随机值。此函数在单独的线程中运行。 如果我关闭窗口,我想结束函数(通过结束“while”循环)并加入线程。
问题是,在某些情况下,窗口会冻结并且不会关闭。
public partial class MainWindow : Window
{
Random random;
Thread background_work;
bool running;
public MainWindow()
{
InitializeComponent();
random = new Random();
background_work = new Thread(Background_Work);
running = true;
background_work.IsBackground = true;
background_work.Start();
}
private void Background_Work()
{
while (running)
{
myBar.Dispatcher.Invoke(() => { myBar.Value = random.Next(0, 100); });
Thread.Sleep(1000);
}
}
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
running = false;
background_work.Join();
}
}
【问题讨论】:
-
使用 Dispatcher.Invoke 和 Thread.Sleep 的线程绝对是错误的方法。请改用 DispatcherTimer。
-
^^ 这里是文档的链接:DispatchTimer
-
感谢您的提示
标签: c# wpf multithreading