c# - 如何在不轮询 ThreadState 的情况下判断线程是否完成执行?

标签 c# .net multithreading worker-thread

有没有一种优雅的方法可以知道工作线程何时执行完毕,以便我可以访问它产生的资源?

例如,如果工作线程使用查询 SQL Server 列表

ServersSqlDataSourceEnumerator.Instance.GetDataSources();

并将结果保存在 DataTable 变量中,我可以使用什么机制来知道此 DataTable 变量何时已填充/可用。我不想轮询 ThreadState;最好在事件完成后触发事件,这样我就可以对结果执行操作。

谢谢!

最佳答案

您可以使用回调机制或阻止事件来了解异步操作的完成。请参阅此页面以获取 Asychronous Programming Model in .net - 您可以对任何委托(delegate)调用 BeginInvoke 以异步方式执行操作。

如果您使用的是 BackgroundWorker 类型,则可以订阅 RunWorkerCompleted event .

关于c# - 如何在不轮询 ThreadState 的情况下判断线程是否完成执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/945122/

相关文章:

c# - EqualityComparerer<T>.Default.Equals() 与 object.Equals() 和多态性

c# - 不能在此范围内声明名为 'e' 的局部变量或参数

c# - Linq2Sql - 尝试更新但 sql 中的 Set 语句为空

c++ - qt-通过线程更新用户界面

mysql - 单消费者-多线程 vs 多消费者

c# - 如何在C#中通过Datatable的单元格值获取行索引

c# - 从 WindowsCE 上的非托管 C++ 应用程序调用 C# Dll

java - 何时使用 thread.interrupt() 以及何时抛出 InterruptedException

c# - Autofac 相当于此特定 Ninject 绑定(bind)

c# - 当我从 'int' 类型的 sqlite 列中选择时,我可以转换为 .net int 但是当我从 'integer' 列中选择时,我不能