C# 如何在处理大量数据时保持响应性UI?

C# 如何在处理大量数据时保持响应性UI?,c#,winforms,user-interface,C#,Winforms,User Interface,我正在创建winform以处理(将txt文件转换为tiff)大量文件。我把所有的代码放在一个按钮后面(btnProcess)。这是个好主意吗?它可以工作,但我注意到当我离开winform回到这里时,我会看到一个空白窗口,直到过程完成。我听说有个背景工人。背景工作者的目的是什么 这里需要的是多线程。这意味着两个(或更多)代码线程将并行运行。其中一个是UI线程,负责绘制窗口。在本例中,您正在UI线程中运行代码,因此在代码运行时阻止UI呈现 的目的是在新线程上启动操作,这正是您所需要的。 Backgr

我正在创建winform以处理(将txt文件转换为tiff)大量文件。我把所有的代码放在一个按钮后面(btnProcess)。这是个好主意吗?它可以工作,但我注意到当我离开winform回到这里时,我会看到一个空白窗口,直到过程完成。我听说有个背景工人。背景工作者的目的是什么

这里需要的是多线程。这意味着两个(或更多)代码线程将并行运行。其中一个是UI线程,负责绘制窗口。在本例中,您正在UI线程中运行代码,因此在代码运行时阻止UI呈现

的目的是在新线程上启动操作,这正是您所需要的。

BackgroundWorker类允许您 要在单独的服务器上运行操作, 专用线程。费时的 下载和数据库等操作 事务可能会导致您的用户 界面(UI)看起来好像 已停止响应 跑步当你想要一个响应性强的用户界面时 你面临着长时间的拖延 与此类操作相关联的 BackgroundWorker类提供了 方便的解决方案


我上面链接的页面包含一个完整的BackgroundWorker示例,具体取决于您的应用程序。如果这是一个单一用途的应用程序,它不是很长,唯一的问题是屏幕无法绘制。这就是我的声音,只要把Apdio.DoEvices扔进循环并完成它。

也可以,因为处理大量文件,您可能需要考虑多个后台线程,以便可以并行处理多个文件。然而,值得注意的是,这将主要有利于多核CPU(不管怎样,大多数最新的CPU)。通过使用类似并行扩展名的多线程for循环,而不是创建X BackgroundWorkers,这也会更容易实现。@Raj:开始谈论文件IO时,你必须小心。这是最慢的进程,多线程一系列文件操作不能保证性能的提高。这取决于最长的操作是什么,在这种特殊情况下:加载(和保存)文件还是处理它?我尝试了后台处理,但它太复杂了。特别是,当我必须掌握窗体的控件时。我想我将只使用UI踏板。我有一个子程序,我是从按钮点击调用的。我更改了按钮单击以转到dowork,然后调用子例程,但它变得混乱。请尽量使您的问题具有描述性,以帮助其他面临类似问题的用户,并尽可能吸引最佳答案。“winform问题”不太可能实现这两个目标。好建议。我喜欢这个新标题,它更有意义。我只是不知道那些花哨的词或技术术语。如果你是多线程范例的新手,我建议你使用后台工作者,它是多线程编程的抽象。如果我们使用异步的所有服务方法,任务。那么它可能会降低性能(在大型应用中)?这是一个非常广泛的问题。如果并行运行的任务太多,系统会在某个时候过载。然而,如果没有更多的细节,就不可能知道这意味着5项任务还是100项任务。