当前位置: 首页 > 编程语言 > C#

如何在不轮询ThreadState的情况下判断线程是否执行完毕?分享

时间:2023-04-11 00:26:46 C#

不轮询ThreadState如何判断一个线程是否执行完毕?有没有一种优雅的方法可以知道工作线程何时完成执行,以便我可以访问它产生的资源?例如,如果工作线程使用ServersSqlDataSourceEnumerator.Instance.GetDataSources()查询SQLServer列表;并将结果保存在DataTable变量中,我可以使用什么机制来了解此DataTable变量何时填充/可用。我不想轮询ThreadState;最好在事件完成时触发事件,这样我就可以根据结果采取行动。谢谢!您可以使用回调机制或事件块来了解异步操作的完成情况。请参阅此页面以了解.net中的异步编程模型-您可以对任何委托调用BeginInvoke以异步执行操作。如果您使用的是BackgroundWorker类型,则可以订阅RunWorkerCompleted事件。所以触发一个事件:-P你也可以看看使用AutoResetEvent:http://msdn.microsoft.com/en-us/library/system.threading.autoresetevent.aspx我在这个例子中所做的是让WorkerThread做work调用一个函数后,它会调用UIThread,它可以完成你需要的工作。例如privatevoidSetWorkerThreadToDoWork(){WorkerThread.Start();}privatevoidMyWorkerThreadWork(){//这将在WorkerThread上(从WorkerThread.Start()调用)DoWorkFunc();工作完成();}privatevoidWorkComplete(){if(InvokeRequired==true){//执行调用}else{//检查工作线程完成的工作//egServersSqlDataSourceEnumerator.Instance.GetDataSources();如果这是您使用的简单过程,我会选择BackgroundWorkerThread,它会在工作完成时触发自己的事件。但是,如果您需要使用线程,我会查看异步回调或与上面显示的路径类似的内容。您可以在使用回调机制的SO线程上查看我的答案。当异步操作完成时,它会触发一个回调方法,您可以在其中处理SQL执行后需要完成的处理。使用类似的方法在异步操作完成时发出通知。希望这会有所帮助:)我不使用C#编程,但这是我在Delphi中所做的,也许您可??以在C#中完成。我有一个TThread后代,在“销毁”事件中,我向它的创建者发送一条消息说“嘿,我快死了!”。这样,它的父线程(即主线程)将在需要时创建一个新线程。准确地说,它会启动一个计时器,当它被触发时,如果需要一个新线程,就会创建一个新线程(网站太浪费时间了(笑)!!)。以上是C#学习教程:如何在不轮询ThreadState的情况下判断线程是否执行完毕?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: