c# - c#.net 应用程序中长时间运行的函数执行
问题描述
我正在开发一个用 C#/.Net 开发的桌面应用程序,它有很多长时间运行的进程。运行时 UI 卡住了。这肯定会激怒用户。
出于这个原因,我使用了一个后台进程,这很有帮助。
但是我必须在每种形式上都使用它;该应用程序有一百多个需要使用后台进程的表单。
现在,我正在尝试创建一个函数,我将一个函数传递给该函数以在非 UI 线程或后台进程中运行该函数。
那可能吗?
我可以将不同的自定义函数发送到一个在后台进程中执行这些函数的中央函数吗?
解决方案
.NET 已内置,请参阅
ThreadPool.QueueUserWorkItem
你可以排队像
ThreadPool.QueueUserWorkItem((s) => { /* stuff to do in the background */ }, thing);
这允许您将要由线程池线程执行的函数排队。当线程开始处理您的函数时,该thing
变量将通过参数作为对象传递。s
如果您想从后台线程更新您的 UI 线程上的内容,您应该检查是否InvokeIsRequired
以及如果是,Invoke
则更改(基本上它将一个函数传递回您的 UI 线程以更新 UI 元素)
不过,这可能不是您遇到的最佳方法,但我不确定您的背景工作是什么。
推荐阅读
- ios - 如何将 UIButton 默认设置为 OFF?
- mysql - 选择多个关系值
- c++ - 多态性 - 指向类程序无法编译
- c - 与外部传递数据的错误值
- python - 当您的脚本使用批处理文件时 Python 到 Exe
- c# - c#当javascript版本为201时httpclient返回400错误
- android - database.execSQL(sql) 方法使我的模拟器崩溃
- python - List of coroutines, wait until at least one yielded in Python
- python - Sklearn - 按类别分组并从每个数据框类别中获取前 n 个单词?
- laravel - Laravel 有没有办法忘记视图中的会话变量?