c# - 线程执行后调用委托(delegate)

标签 c# multithreading

我需要调用一条可能需要 3 分钟以上才能运行的 SQL 命令。

很明显,我不只是想调用它并等待它完成。

我想做的是创建一个线程并在其中执行。

我也不想使用“Are we there yet?”方法,并且希望线程在它已完成的调用线程中调用委托(delegate)。

所以我把它作为主线程;

public Thread Process()
{
    worker = new Worker { date = date, dc = dc, despatchProcess = despatchProcess };
    workerThread = new Thread(worker.process);
    workerThread.Start();
    return workerThread;
}

所以在 worker 内部,我希望它在这个主线程中调用一个委托(delegate)。

实现它的最佳方法是什么?

最佳答案

最好的选择是使用Task,而不是线程。然后,您可以在任务上添加延续(或新的 async/await 语法)以在任务完成时运行代码。

public Task Process()
{
    worker = new Worker { date = date, dc = dc, despatchProcess = despatchProcess };
    return Task.Factory.StartNew( () => worker.process() );
}

然后调用者可以写:

Task work = Process();
work.ContinueWith(t => 
{
    // Run code here when work is done
});

如果您需要在主 UI 线程中运行完成时运行的代码,您可以使用:

work.ContinueWith(t => 
{
    // Run code here when work is done
}, TaskScheduler.FromCurrentSynchronizationContext());

关于c# - 线程执行后调用委托(delegate),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16803046/

相关文章:

c# - 在读取SQL#的SQLite数据库上实现进度条

c# - c#中求和的问题

.net - 如何在 .net 内存转储中列出正在运行的任务

c# - 具有字符串值的复选框的数据绑定(bind)

c# - 图片从 HTTP 客户端上传到 C# Web Api

multithreading - pthread_join 因 OSX 上的段错误而间歇性崩溃

java - 什么时候在 Java 中选择多个进程而不是线程?

Python "requests"在线程中不工作/阻塞?

c++ - Qt 信号/槽和线程

c# - PHP SHA1 与 PasswordDeriveBytes SHA1 - 不同的长度