使用哪种方法来完成特定任务都有其优缺点。
这个问题的关键在于何时使用哪一个方法?
非常感谢。
这个问题的关键在于何时使用哪一个方法?
非常感谢。
当你不需要与UI(WinForms或WPF)一起工作时,请使用线程;当你需要处理UI时,请使用后台工作者。
使用UI和后台工作者可以避免许多问题。
我过去常把BackgroundWorker视为Threads的包装器。因此,我会在GUI工作中使用BackgroundWorker,在更专业或肮脏的工作(如Windows服务等)中使用Threads。
BackgroundWorker类简单地提供了事件,这些事件会为你切换到UI线程的上下文,但不要被困扰;DoWork事件(在那里你实际上执行工作)仍然在另一个线程的上下文中执行(因为这是整个过程的重点),在那里执行任何类型的UI交互或更新最好会抛出异常,最坏的情况下会崩溃。当您正在尝试做一些需要UI更新并且其范围不超出表单的内容时,请在表单上使用BackgroundWorker。对于其他后台操作,请考虑使用线程池(用于短期操作)或创建自己的线程。
BackgroundWorker通过ProgressChanged事件提供方便,但不要太舒服并在DoWork中开始进行UI更新。