我想实现什么:我想从我的MDI winforms应用程序(C#-.NET)中执行一些耗时的操作。
MDI子窗体可能会通过该操作创建线程,这可能需要很长时间(从0.1秒,甚至半小时)才能完成。同时,我希望UI响应用户操作,包括以其他MDI子形式处理数据。操作完成后,线程应通知MDI子代计算已完成,
以便MDI子级可以执行后处理。
我如何实现:
我应该使用显式线程(即创建显式线程),线程池吗?或者只是提出您的解决方案。我应该创建前台线程还是后台线程?
根据您提出的解决方案,线程如何与GUI通信?
如果您知道处理类似情况的工作示例,请做笔记。
最佳答案
这要视情况而定。
通常,I agree with BFree表示BackgroundWorker可能是此处的最佳选择。我使通知返回到UI变得简单,等等。
话虽这么说,我发布的唯一原因是,质疑您是否要使用BackgroundWorker的是以下语句:
which may take long time (from 0.1 seconds, to even half hour) to complete
BackgroundWorker使用ThreadPool线程执行其处理。这意味着关闭您的“应用程序”表单将终止该线程,因为它是一个后台线程。
如果您希望继续运行“半小时”来处理“工作”,即使关闭了窗体,则可能需要创建自己的前台线程来执行此操作,并自行处理UI。
关于c# - 多线程机制可从winforms代码运行一些冗长的操作,并与GUI进行通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2457304/