C# 检测线程池任务是否仍在进行中
如果将较慢的任务添加到C# 检测线程池任务是否仍在进行中,c#,android,xamarin,threadpool,C#,Android,Xamarin,Threadpool,如果将较慢的任务添加到线程池.QueueUserWorkItem,如何检测该任务是否仍在进行中 点击一个按钮,我想在任务进行时显示一个预加载程序图形,然后在任务完成时隐藏它并显示一个对话框 public class MyActivity : Activity { protected Button myButton; private Dialog myDialog; private ManualResetEvent slowEvent = new ManualResetEv
线程池.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();
}
}
您可以简单地创建一个必须调用的方法,而不是直接使用
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
(操作排队)。您可以使用它们直接调用某个对象,也可以简单地引发事件(其他对象可以使用它来监听)。为什么不使用tasks api?异步方法1。显示弹出窗口2。等待后台任务3。取消弹出窗口