c#.net应用程序中长时间运行的函数执行
我正在开发一个用C#/.Net开发的桌面应用程序,它有很多长期运行的进程。当这些程序运行时,UI被卡住。这肯定会激怒用户 出于这个原因,我使用了一个后台进程,这很有帮助 但我必须在每种形式上使用它;该应用程序有一百多个表单需要使用后台进程 现在,我正在尝试创建一个函数,并向其传递一个函数,以便在非UI线程或后台进程中运行该函数 可能吗c#.net应用程序中长时间运行的函数执行,c#,.net,C#,.net,我正在开发一个用C#/.Net开发的桌面应用程序,它有很多长期运行的进程。当这些程序运行时,UI被卡住。这肯定会激怒用户 出于这个原因,我使用了一个后台进程,这很有帮助 但我必须在每种形式上使用它;该应用程序有一百多个表单需要使用后台进程 现在,我正在尝试创建一个函数,并向其传递一个函数,以便在非UI线程或后台进程中运行该函数 可能吗 我可以将不同的自定义函数发送到一个执行后台进程中的函数的中心函数吗?.NET内置了它,请参阅 ThreadPool.QueueUserWorkItem 你可以
我可以将不同的自定义函数发送到一个执行后台进程中的函数的中心函数吗?.NET内置了它,请参阅
ThreadPool.QueueUserWorkItem
你可以像这样排队
ThreadPool.QueueUserWorkItem((s) => { /* stuff to do in the background */ }, thing);
这允许您对线程池线程执行的函数进行排队。当线程开始处理函数时,thing
变量将通过s
参数作为对象传入
如果要从后台线程更新UI线程上的内容,应检查InvokeIsRequired
,如果需要,则检查Invoke
更改(基本上,它会将函数传递回UI线程以更新UI元素)
不过,在您的情况下,这可能不是最好的方法,但我不确定您的背景工作是什么。查看等待异步模式。除了
线程池
,您还可以通过创建多个线程。后台进程只包括将数据保存到数据库,并且在初始化表单时,我们必须更新控件属性。