use*_*817 15 c# multithreading backgroundworker infinite-loop winforms
我需要能够继续运行我的BackgroundWorker.该DoWork事件包含池线程进程并OnComplete更新我的UI.
在BackgroundWorker.RunWorkerAsync()没有整个程序冻结的情况下,我无法找到无限循环方法的方法.任何帮助将不胜感激.
Tom*_*tom 26
你必须在你的DoWork-Method中循环.要更新UI,请使用ProgressChanged-Method.这是一个小例子,它是如何看起来的
public Test()
{
this.InitializeComponent();
BackgroundWorker backgroundWorker = new BackgroundWorker
{
WorkerReportsProgress = true,
WorkerSupportsCancellation = true
};
backgroundWorker.DoWork += BackgroundWorkerOnDoWork;
backgroundWorker.ProgressChanged += BackgroundWorkerOnProgressChanged;
}
private void BackgroundWorkerOnProgressChanged(object sender, ProgressChangedEventArgs e)
{
object userObject = e.UserState;
int percentage = e.ProgressPercentage;
}
private void BackgroundWorkerOnDoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = (BackgroundWorker) sender;
while (!worker.CancellationPending)
{
//Do your stuff here
worker.ReportProgress(0, "AN OBJECT TO PASS TO THE UI-THREAD");
}
}
Run Code Online (Sandbox Code Playgroud)
小智 7
我在过去需要在后台运行时才这样做.如果您尝试在运行时运行后台工作程序,您将获得一个急救!这就是为什么我让BackGroundWorker在完成的事件中完成时自动启动.
然后它将永远循环.
private void Main_Load(object sender, EventArgs e)
{
// Start Background Worker on load
bgWorker.RunWorkerAsync();
}
private void bgWorker_DoWork(object sender, DoWorkEventArgs e)
{
Thread.Sleep(1000); // If you need to make a pause between runs
// Do work here
}
private void bgCheck_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
// Update UI
// Run again
bgWorker.RunWorkerAsync(); // This will make the BgWorker run again, and never runs before it is completed.
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
27535 次 |
| 最近记录: |