c# - 多线程机制可从winforms代码运行一些冗长的操作,并与GUI进行通信

标签 c# .net vb.net winforms multithreading

我想实现什么:我想从我的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/

相关文章:

c# - 从 C# 调用 C++ 函数时出现访问冲突异常

c# - 索引文件大小限制

c# - 如何在C#中读取xml文件?

.net - 显示引号 "

.net - .NET 中机器的域名?

.net - IO.Compression 有问题吗?

c - 调用 native 代码时抛出 ExecutionEngineException

.net - VB.NET 排序 IEnumerable 类

C# 将 Conditional() 与环境变量一起使用

.net - 如何在 F# 中使用 System.Threading.Tasks?