我有一个程序集(.NET 类库),其中包含一个为异步方法实现 EAP 的对象:
class Product
{
void Install();
void InstallAsync();
EventHandler<InstallProgressChangedEventArgs> Installing;
EventHandler<InstallCompletedEventArgs> Installed;
}
我正在考虑是使用“标准”Thread
还是使用 .NET 提供的 BackgroundWorker
类。
I've read仅当预计该对象将在“Windows 窗体”或 UI 中使用时,才应使用 BackgroundWorker。我正在编写的类库可以在 Windows 窗体、WPF 应用程序和控制台应用程序上使用。
此外,如果我要使用 BackgroundWorker
类,那么从 BackgroundWorker
类中继承子类是否“合适”?我不想公开类的成员,因为我将提供自己的事件(安装和已安装)。
如果 BackgroundWorker
类不合适,您可以推荐什么以及为什么?
最佳答案
在 Windows 窗体 UI 应用程序之外使用 BW 组件没有问题。它适用于您只需要轻松启动后台线程并在工作完成时接收回调的情况。
如果您唯一的要求是您想要启动一个线程来完成工作并返回结果,并且您不需要通过自己管理线程来获得控制权,那么我建议您使用它。
不过,我不会将其子类化,除非您希望您的组件本身成为后台工作人员。也就是说,您正在扩展其行为。如果您只是使用其行为,则无需子类化,只需使用组合即可。
关于c# - 我应该使用BackgroundWorker 来实现基于事件的异步模式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5475918/