我在线程/背景工作者等几乎完全处女。
我正在尝试这样做:
当后台BL正在运行时,我希望UI不要挂起,但继续执行下一个BL方法应该只在第一个BL方法结束后执行并且UI已经用消息更新我想出席。
我喜欢最苗条,最简单的方法。使用.Net 4.5,所以我相信我们正在谈论任务,对吧?
我已经阅读了数十篇Stackoverflow文章,并咨询了谷歌和姨妈MSDN,但它的压倒一切 - 有很多方法可以做到这一点,我有点迷失。
提前致谢。
答案 0 :(得分:1)
无论您谈论什么,使用async / await都非常简单。既然你说你是多线程的新手,我建议你阅读并熟悉它。这是good start和this
我假设您可以自己实施#1,而您只需要实施休息的指导。所以,我不会在我的帖子中谈论它。
理论上,您需要一个包含工作需求列表的集合,然后在上一个完成后逐个启动。
提供一些代码示例
List<WorkItem> workItems = ...;//Populate it somehow
private async Task DoWorkMain()
{
foreach (var item in workItems)
{
await DoWork(item);
//WorkItem completed, Update the UI here,
//Code here runs in UI thread given that you called the method from UI
}
}
private Task DoWork(WorkItem item)
{
//Implement your logic non blocking
}
然后从UI调用的某处
await DoWorkMain();
WorkItem
是一个包含有关要完成的工作的数据的类。
答案 1 :(得分:-2)
您需要创建一个用于在后台处理数据的线程。您可以使用参数化线程,如果您想在第一次完成后继续第二次执行,请在线程的while lop中设置一个布尔变量,或者编写线程同步。