【问题标题】:Detect if ThreadPool task is still in progress检测 ThreadPool 任务是否仍在进行中
【发布时间】:2016-04-09 11:05:34
【问题描述】:

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

【问题讨论】:

标签: c# android xamarin threadpool


【解决方案1】:

您可以简单地创建一个必须调用的方法,而不是直接使用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(动作排队)。您可以使用它们直接调用某些东西或简单地增加事件(其他东西可以用来收听)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-13
    • 2011-05-19
    • 2011-01-20
    • 1970-01-01
    • 2011-03-07
    • 1970-01-01
    • 1970-01-01
    • 2016-01-27
    相关资源
    最近更新 更多