C# 当我让大数据用户知道该方法正在运行而不被冻结时,该如何做?
我有一个可能需要很长时间才能完成的方法。我想防止程序在该方法运行时冻结C# 当我让大数据用户知道该方法正在运行而不被冻结时,该如何做?,c#,wpf,freeze,C#,Wpf,Freeze,我有一个可能需要很长时间才能完成的方法。我想防止程序在该方法运行时冻结 如何向用户显示它正在运行该方法(例如进度条)?您应该使用BackgroundWorker类。它比纯线程更好,因为它做了一些额外的事情。现在不记得了,我已经做WPF很久了。此代码将帮助您: private void button1_Click(object sender, RoutedEventArgs e) { BackgroundWorker worker = new BackgroundW
如何向用户显示它正在运行该方法(例如进度条)?您应该使用BackgroundWorker类。它比纯线程更好,因为它做了一些额外的事情。现在不记得了,我已经做WPF很久了。此代码将帮助您:
private void button1_Click(object sender, RoutedEventArgs e)
{
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += new DoWorkEventHandler(worker_DoWork);
worker.RunWorkerAsync();
}
void worker_DoWork(object sender, DoWorkEventArgs e)
{
for (int i = 0; i < 10; i++ )
{
Thread.Sleep(500);
Dispatcher.Invoke(new Action(() => { this.progressBar1.Value++; }));
}
}
private void按钮1\u单击(对象发送者,路由目标)
{
BackgroundWorker工人=新的BackgroundWorker();
worker.DoWork+=新的doworkereventhandler(worker\u DoWork);
worker.RunWorkerAsync();
}
无效工作线程(对象发送器,工作线程目标)
{
对于(int i=0;i<10;i++)
{
睡眠(500);
Invoke(新操作(()=>{this.progressBar1.Value++;}));
}
}
首先,正如H.B所说,如果该方法在某个后台线程中异步运行,那么您的UI将不会冻结
如果你想在你的用户界面上有一个进度条,可以告诉用户完成了多少进度,那么你可以使用a的功能,如果该方法是异步的,它无论如何都不应该冻结…很抱歉我写错了。如果我不使用异步方法,它将冻结,如何让用户知道方法正在运行?prgoress bar显示完成的百分比,我不能这样做,因为我不知道如何获得该百分比。如果您只想显示正在进行的事情,可能有一个加载ui。请使用BackgroundWorker完成时引发的事件,即
BackgroundWorker.completed
。您不理解我,我知道它何时完成,但不知道工作时间