【问题标题】:Can i add a callback to a BackgroundWorker that is already running?我可以向已经运行的 BackgroundWorker 添加回调吗?
【发布时间】:2014-04-02 11:29:11
【问题描述】:

是否可以在后台工作人员运行时为其添加回调?

bw.DoWork += new DoWorkEventHandler( some callback );

bw.RunWorkerAsync();

bw.DoWork += new DoWorkEventHandler( some callback );

谢谢。

【问题讨论】:

  • 是的,你可以。但我想这不会被称为
  • @SriramSakthivel 谢谢。有没有办法将任务放入队列中?
  • 您可以为此使用Queue 类,向其中添加工作项,然后一一处理。另一种选择是使用BlockingCollection

标签: c# multithreading events callback


【解决方案1】:

是的,你可以,因为它只是一个事件的订阅,但你不能运行 bw,直到他完成第一个任务的执行

这里有一个例子来说明这一点,下面的代码将显示一个InvalidOperationException告诉这个BackgroundWorker is currently busy and cannot run multiple tasks concurrently."

public partial class Form1 : Form
    {                       
        public Form1()
        {
            InitializeComponent();
            backgroundWorker1.DoWork += new DoWorkEventHandler(backgroundWorker1_DoWork);
            backgroundWorker1.RunWorkerAsync();
            backgroundWorker1.DoWork+=new DoWorkEventHandler(backgroundWorker2_DoWork);
            //at this line you get an InvalidOperationException
            backgroundWorker1.RunWorkerAsync();




        }

        void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            do
            {

            } while (true);
        }
        void backgroundWorker2_DoWork(object sender, DoWorkEventArgs e)
        {
            do
            {

            } while (true);
        }
       }

作为对您的评论问题的回答

@SriramSakthivel Thanks. Is there a way to put tasks in a queue ?

是的,如果您使用的是 .net 4.0,您可以使用带有 ContinueWith 的任务并将其附加到您的 UI taskScheduler 它将具有与使用 BackgroundWorker 相同的行为

private void TestButton_Click(object sender, EventArgs e)
{
    TestButton.Enabled = false;
    var uiThreadScheduler = TaskScheduler.FromCurrentSynchronizationContext();

    var backgroundTask = new Task(() =>
    {
        Thread.Sleep(5000);
    });

    var uiTask = backgroundTask.ContinueWith(t =>
    {
        TestButton.Enabled = true;
    }, uiThreadScheduler);

    backgroundTask.Start();
}

【讨论】:

    猜你喜欢
    • 2017-07-17
    • 1970-01-01
    • 2019-04-07
    • 2021-10-15
    • 2012-03-26
    • 2021-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多