我有一个生成事件的用户界面。所以我有一个事件,例如带有参数的“ButtonPressed”。 在事件上我想要解雇耗时的函数“GenerateTableData”。另外我不想阻止界面,所以这个功能应该在后台线程上。 在此之后,我可以将调用传递回主线程并填充列 但是如果用户在按钮上按两次,我不想创建两个线程。相反,我想要中断私有的或者等到它完成并立即启动另一个(单独的按钮用单独的数据填充表格,我们需要仅显示最后一个按下的结果)。
我坚持这个选择。对我来说似乎有用的就是在每个事件上投射背景工作者,但是我不能阻止它执行两次或更多次并且不能排队等待更多事件。
请给我一个解决这个任务的例子,我认为这应该很常见。
这是一些伪代码:
void Button1Pressed(args)
{
DoWork(1);
}
void Button2Pressed(args)
{
DoWork(2);
}
void DoWork(int i)
{
BackGroundWorker bg=new BackGroundWorker();
bg.DoWork+= (object sender, DoWorkEventArgs e) => {e.result=GenerateTable(i)};
bg.RunWorkerCompleted+= (object sender, RunWorkerCompletedEventArgs e) =>{InvokeOnMainThread(()=>{PopulateColumns(e.result)})};
bg.RunWorkerAsync();
}
void PopulateColumns(data)
{
myTable.PopulateWithData(data);
}
答案 0 :(得分:0)
执行此操作的典型方法是:
通过“踢队”我的意思是