首页 > 解决方案 > c#.net 应用程序中长时间运行的函数执行

问题描述

我正在开发一个用 C#/.Net 开发的桌面应用程序,它有很多长时间运行的进程。运行时 UI 卡住了。这肯定会激怒用户。

出于这个原因,我使用了一个后台进程,这很有帮助。

但是我必须在每种形式上都使用它;该应用程序有一百多个需要使用后台进程的表单。

现在,我正在尝试创建一个函数,我将一个函数传递给该函数以在非 UI 线程或后台进程中运行该函数。

那可能吗?

我可以将不同的自定义函数发送到一个在后台进程中执行这些函数的中央函数吗?

标签: c#.net

解决方案


.NET 已内置,请参阅

ThreadPool.QueueUserWorkItem

https://docs.microsoft.com/en-us/dotnet/api/system.threading.threadpool.queueuserworkitem?view=netcore-3.1

你可以排队像

ThreadPool.QueueUserWorkItem((s) => { /* stuff to do in the background */ }, thing);

这允许您将要由线程池线程执行的函数排队。当线程开始处理您的函数时,该thing变量将通过参数作为对象传递。s

如果您想从后台线程更新您的 UI 线程上的内容,您应该检查是否InvokeIsRequired以及如果是,Invoke则更改(基本上它将一个函数传递回您的 UI 线程以更新 UI 元素)

不过,这可能不是您遇到的最佳方法,但我不确定您的背景工作是什么。


推荐阅读