如果我向ThreadPool.QueueUserWorkItem
添加较慢的任务,我该如何检测任务是否仍在进行中?
单击按钮我想在任务进行过程中显示预加载器图形,然后在完成后隐藏它并显示对话框。
public class MyActivity : Activity
{
protected Button myButton;
private Dialog myDialog;
private ManualResetEvent slowEvent = new ManualResetEvent(false);
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
**setup myButton & myDialog**
ThreadPool.QueueUserWorkItem(o => slowTask());
}
private void slowTask()
{
**do some slow stuff**
slowEvent.Set();
}
protected void myButton_Click(object sender, EventArgs e)
{
**display pre-loader graphic if task is still running**
popupMenuDialog.Show();
}
}
答案 0 :(得分:0)
您只需创建一个必须调用的方法,而不是直接使用ThreadPool
进行操作。而不是
ThreadPool.QueueUserWorkItem(o => slowTask());
你会做
Start(slowTask);
// Start(() => slowTask());
哪里
public void Start(Action action)
{
... // 1
ThreadPool.QueueUserWorkItem(o =>
{
... // 2
action();
... // 3
});
... // 4
}
通知占位符1
(在操作排队之前),2
(操作即将执行),3
(操作已完成)和4
(操作排队)。你可以使用它们直接调用某些东西或者简单地引发事件(其他东西可以用来听)。