【发布时间】:2017-02-23 12:05:09
【问题描述】:
我有一种情况,当用户单击一个 tabitem 时,用户创建了一个类的实例。这个类包含一个绘制图表的函数,它非常耗时,所以它是异步编写的。
现在的问题是假设用户第一次单击选项卡并且类实例化并且长时间的过程工作了很长时间,同时之前的异步任务没有完成并且用户再次单击同一个选项卡。
在这种情况下,我必须等到前一个异步任务没有完成,然后在第二次点击时,tabitem 必须在第一个异步任务完成后创建实例(它应该等到第一个异步进程没有完成)。
代码在这里:
if (selectedTabIndex == 2) //What is the user selected second time whil the previous task is still not finshed ?
{
DrawGraph obj= new DrawGraph(selectedItem.Name);
}
我在 DrawGraph 类构造函数的某个地方完成了:
public DrawGraph(string Name)
{
timeConsumingProcess(Name);
}
public async void timeConsumingProcess(string Name)
{
await startTaimeConsumingProcess();
}
我想要的是当用户第二次单击此选项卡项目编号 = 2 时,它必须等到上一个异步任务完成,然后它必须再次实例化 DrawGraph 类以 再次重新启动异步。
如何实现?
【问题讨论】:
-
为什么不禁用标签?
-
@HristoYankov 是的,我有这个想法,但我的前辈不接受。
标签: c# .net multithreading asynchronous async-await