【问题标题】:Is it possible to use BackgroundWorker class with .net core?是否可以将 BackgroundWorker 类与 .net 核心一起使用?
【发布时间】:2016-12-16 18:29:15
【问题描述】:

我正在尝试将在 Windows 上运行良好的 C# 控制台项目移植到带有 .NET Core 的 Linux。 我创建了一个 project.json 文件,运行 dotnet restore ,一切似乎都正常。 但是当我运行 dotnet build 时,我收到了这条消息:

找不到类型或命名空间名称“BackgroundWorker”(是 您缺少 using 指令或程序集引用?)

根据.NET Core API,System.ComponentModel中似乎存在BackgroundWorker类。

这是我的 project.json :

"version": "1.0.0-*",
  "buildOptions": {
  "debugType": "portable",
  "emitEntryPoint": true
  },
  "dependencies": {},
  "frameworks": {
    "netcoreapp1.1": {
      "dependencies": {
        "Microsoft.NETCore.App": {
          "type": "platform",
          "version": "1.1.0"
        }
      },
      "imports": "dnxcore50"
    }
  }

我错过了什么吗?

谢谢!

【问题讨论】:

  • 我不确定我是否遗漏了什么......你为什么发布你的 project.json?
  • BackgroundWorker 似乎是为 WinForms 和 WPF 构建的 - 在控制台程序中,您不妨使用原始线程。但性感的新替代品是任务并行库(即System.Threading.Tasks 命名空间)。您是否考虑过使用它?
  • 您还需要安装相应的package。与 .NET Framework 不同,这些“系统程序集”通常不是。 .NET Core 更加模块化。
  • 在控制台应用程序中使用旨在处理同步上下文和后台线程的 BW 有什么意义?扔掉它。
  • 谢谢大家,即使安装了 System.ComponentModel 包,我也没有设法让 BackgroundWorker 工作。不过,它确实适用于 Mono。无论如何,正如你所建议的,我最终用任务替换了每个 BackgroundWorker。再次感谢!

标签: c# .net .net-core


【解决方案1】:

您需要包含System.ComponentModel.EventBasedAsync nuget 包作为依赖项(而不是System.ComponentModel nuget 包)。如果您查看BackgroundWorker.cs file on GitHub,您会发现它嵌套在System.ComponentModel.EventBasedAsync 命名空间下。

您的 project.json 应该如下所示:

  "version": "1.0.0-*",
  "buildOptions": {
  "debugType": "portable",
  "emitEntryPoint": true
  },
  "dependencies": {},
  "frameworks": {
    "netcoreapp1.1": {
      "dependencies": {
        "Microsoft.NETCore.App": {
          "type": "platform",
          "version": "1.1.0"
        },
        "System.ComponentModel.EventBasedAsync": "4.3.0"
      },
      "imports": "dnxcore50"
    }
  }

【讨论】:

    猜你喜欢
    • 2019-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-14
    • 2017-12-28
    相关资源
    最近更新 更多