确保线程在继续(使用任务)之前完成并使其进入睡眠状态

本文关键字:状态 继续 线程 确保 任务 | 更新日期: 2023-09-27 18:33:33

我的程序有一个根据用户输入执行命令的线程。有时,命令可能需要一段时间才能运行。

因此,我需要为长时间运行的任务启动一个线程,以便允许用户继续工作。

在谷歌搜索了一会儿后,我找到了任务,并制作了下面的代码:

    private Thread t_Thread;
    private void startTask()
    {
        Console.WriteLine("Starting");
        Task t = Task.Factory.StartNew(() =>
        {
            for (int i = 0; i <= 4; i++)
            {
                Console.WriteLine(i);
                Thread.Sleep(500); // Is this right?
            }
        });
        Task.WaitAny(t);
        Console.WriteLine("Ending");
    }
    private void button1_Click(object sender, EventArgs e)
    {
        t_Thread = new Thread(() => startTask());
        t_Thread.Start();
    }

它似乎工作正常,但我不确定我是否做得对。有些事情告诉我,我走错了。我有吗?

确保线程在继续(使用任务)之前完成并使其进入睡眠状态

听起来你想要像BackgroundWorker这样的东西。它有一个方法RunWorkerAsync()导致引发其DoWork事件;DoWork 的所有事件处理程序都在不同的线程中执行。

工作完成后,BackgroundWorker会引发其RunWorkerCompleted事件,你可以在 UI 线程上重新侦听该事件。

同时,主窗体应响应用户输入。如果不想接受用户输入,可以在调用 RunWorkerAsync 之前禁用所有控件,然后在 RunWorkerCompleted 事件处理程序中重新启用它们。

如果你的程序应该停止并等到任务完成,那么你不应该使用线程。 相反,只需将光标更改为沙漏并在主线程中执行它。

除此之外,您可能还需要评估为什么事情需要这么长时间,并确定应用程序是否真的应该坐在那里直到完成。