Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 检测线程池任务是否仍在进行中_C#_Android_Xamarin_Threadpool - Fatal编程技术网

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。取消弹出窗口