c# - 我应该使用BackgroundWorker 来实现基于事件的异步模式吗?

标签 c# multithreading backgroundworker

我有一个程序集(.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/

相关文章:

java - `thenRunAsync(...)` 和 `CompletableFuture.runAsync(() -> { ... });` 有关联吗?

sql-server - 从 SqlDataAdapter 后台填充 DataGridView

mysql - 如何解决这个跨线程错误?

c# - 如何在c#中监听序列化的Azure Message Bus消息?

c# - C# 中的 CreatePipe 和必要的权限

c# - 使用 OAuth2 在 Office 365 中进行 IMAP 身份验证

android - Pjsip 在多线程中调用它的函数时在 android 上崩溃

java - 是否有必要使原始实例变量可变?

c# - Microsoft图表控件无法设置背景透明

c# - 使用队列创建 BackgroundWorker