在标题中,我有一些bgw我想在按下每个按钮时调用。 这段代码是否正确?
private static BackgroundWorker bgw = null;
private void bttn_Click(...)
{
if(!bgw.IsBusy)
doSomeWorkInBg();
else
MessageBox.Show("Slow down a bit");
}
private void doSomeWorkInBg()
{
if (bgw == null)
{
bgw = new BackgroundWorker();
bgw.DoWork += new DoWorkEventHandler(bgw_DoWork);
}
bgw.RunWorkerAsync();
}
private void bgw_DoWork(object sender, DoWorkEventArgs e)
{
// do some work that takes time
}
或许我应该用" bgw = null;"添加RunWorkerCompleted事件。代码或类似的东西?
答案 0 :(得分:0)
bgw
静态,因为您在非静态环境中使用它。 bool ShouldRunWorkedASAP; private void bttn_Click(...){ ShouldRunWorkedASAP=true; if (!bgw.IsBusy) bgw.RunWorkerAsync(); } private void bgw_DoWork(object sender, DoWorkEventArgs e) { while (ShouldRunWorkedASAP) { ShouldRunWorkedASAP=false; // do some work that takes time } }
这假设工作在类构造函数中实例化。基本上,此代码设置工作程序应在AS事件发生时尽快运行的标志,然后尝试运行该工作程序。如果它已经在运行 - 那么worker实现中的while()循环将在完成后立即为下一次运行调度作业。
此代码不能确保工作人员完全按照用户按下按钮的次数运行,不确定在您的情况下是否需要这样做。