c#2 BackgroundWorkers同时开始

时间:2013-08-18 14:35:54

标签: c# multithreading backgroundworker

有些人可以看看并告诉我我的代码有什么问题吗? 我正在“动态”创建2个BackgroundWorkers并试图以同样的方式启动它们。 类Listen and Scan背后的代码在单独执行时工作正常,但是当尝试以下面描述的方式执行它们时,由于某种原因它们总是一个接一个地启动。

private void btn_Start_BACKWorkers_Click(object sender, RoutedEventArgs e)
{
    string one = tbx_id1.Text;
    string second = tbx_id2.Text;
    string Status = "";
    var bw1 = new BackgroundWorker();

    bw1.DoWork += delegate
    {
        string SelectedNumber = "0"; 
        Listen myListen = new Listen(SelectedNumber );
        TOTALlist = myListen.Main();
        lbox_TOTAL.ItemsSource = addIPlist;        
    };

    var bw2 = new BackgroundWorker();
    bw2.DoWork += delegate
    {
        Send newScan = new Send(one , second);
        string Status = newScan.hey();
        FinalStatus = Status;

        lbl_SendStatus.Content = FinalStatus ;
    };

    bw1.RunWorkerAsync();
    bw2.RunWorkerAsync();
}

3 个答案:

答案 0 :(得分:1)

谢谢 FerretallicA ! 我不能将你的评论标记为最佳答案,所以我在这里写: 这正是解决问题的原因,BackgroundWorker bw2对于bw1来说太快了所以我增加了睡眠时间:

        bw1.RunWorkerAsync();
        System.Threading.Thread.Sleep(1000);
        bw2.RunWorkerAsync();

现在bw1有足够的时间开始,在bw2启动之前它运行良好! 谢谢你们所有人!你太棒了! 简单的解决方案是最好的!

答案 1 :(得分:1)

您可以在等待信号的线程中使用CountdownEvent

答案 2 :(得分:0)

我认为没有任何迹象表明您的代码无法正常运行。是因为bw1即将完成,所以当bw2被调用时,出现是顺序的吗?例如,如果在bw1委托中添加Thread.Sleep(10000),bw2在启动之前是否仍然等待bw1?

例如:

bw1.DoWork += delegate { 
    Console.WriteLine("Worker 1 started"); 
    Thread.Sleep(10000);
    Console.WriteLine("Worker 1 finished");
};

bw2.DoWork += delegate {
    Console.WriteLine("Worker 2 started"); 
    Console.WriteLine("Worker 2 finished"); 
};

bw1.RunWorkerAsync();
bw2.RunWorkerAsync();

应该产生:

  

工人1开始

     

工人2开始

     

工人2完成了

     

工人1完成了