Gui:需要序列化一系列BackgroundWorker调用

时间:2015-07-04 11:03:19

标签: c# wpf multithreading

我有一个WPF应用程序,我在其中实现了一些BackgroundWorker线程来更新Gui。有时候它可以完美地工作,有时我会变得超出范围异常(当同一个代码被多个线程同时定位时)。

确保我一次使用一个BackgroundWorker以避免这些代码冲突的最简单方法是什么。换句话说,我想让BackgroundWorker调用顺序而不是并行调用。我仍然希望我的GUI能够响应。 BackgroundWorker流程足够快,顺序速度足够。我试图锁定'和'信号量'但他们似乎不能使用BackgroundWorker构造。有什么快速解决方法吗?

2 个答案:

答案 0 :(得分:0)

全局锁定将阻止工作线程并发运行。说过这不是我会选择的方法。我宁愿使用任务并行库进行并发计算,也使用Async进行异步IO。我们走了:

    static object glock = new object();

    private void button1_Click(object sender, EventArgs e)
    {
        using (BackgroundWorker w1 = new BackgroundWorker())
        {
            w1.DoWork += (s, we) => 
            {
                lock (glock)
                {
                    //Some computation 
                    we.Result = 1;
                }
            };
            w1.RunWorkerAsync();
        }

        using (BackgroundWorker w2 = new BackgroundWorker())
        {
            w2.DoWork += (s, we) =>
            {
                lock (glock)
                {
                    //Some computation  
                    we.Result = 2;
                }
            };
            w2.RunWorkerAsync();
        }
    }

答案 1 :(得分:0)

好的,我发现了具有延续的任务和任务因素。对于我当前的项目而言,这比后台工作者更灵活。 我使用同步选项进行延续,并给出了我需要的结果。

感谢您的帮助