我有一个WPF应用程序,我在其中实现了一些BackgroundWorker线程来更新Gui。有时候它可以完美地工作,有时我会变得超出范围异常(当同一个代码被多个线程同时定位时)。
确保我一次使用一个BackgroundWorker以避免这些代码冲突的最简单方法是什么。换句话说,我想让BackgroundWorker调用顺序而不是并行调用。我仍然希望我的GUI能够响应。 BackgroundWorker流程足够快,顺序速度足够。我试图锁定'和'信号量'但他们似乎不能使用BackgroundWorker构造。有什么快速解决方法吗?
答案 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)
好的,我发现了具有延续的任务和任务因素。对于我当前的项目而言,这比后台工作者更灵活。 我使用同步选项进行延续,并给出了我需要的结果。
感谢您的帮助