检测ThreadPool任务是否仍在进行中

时间:2016-01-05 15:04:19

标签: c# android xamarin threadpool

如果我向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();
    }
}

1 个答案:

答案 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(操作排队)。你可以使用它们直接调用某些东西或者简单地引发事件(其他东西可以用来听)。

相关问题