.NET Dispatcher,适用于.NET Core?

时间:2017-01-19 17:43:55

标签: c# .net .net-core

.NET Core存在类似Dispatcher的内容吗?

我需要在.NET Core中创建一个线程,并且能够发送要在线程上调用的动作。此外,我希望能够使用可用于TaskScheduler内容的async/await

这是否存在于某个地方?

4 个答案:

答案 0 :(得分:3)

仅供参考:您可以同时喜欢codevision和JBSnorro的答案:

手动编辑.csproj文件。项目文件应类似于以下内容(对于Core 3.1,请使用3.1而不是3.0):

<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
    <PropertyGroup>
        <TargetFramework>netcoreapp3.0</TargetFramework>
        <UseWPF>true</UseWPF>
    </PropertyGroup>
</Project>

如果已卸载项目,请使用内容菜单中的“重新加载项目”。

注意:应添加UseWPF,但还应修改“ Project Sdk”类型。

答案 1 :(得分:1)

它不是内置的,但我的AsyncContext and AsyncContextThread types可以在适合您需要的库中使用。

AsyncContext接管当前主题:

AsyncContext.Run(async () =>
{
  ... // any awaits in here resume on the same thread.
});
// `Run` blocks until all async work is done.

AsyncContextThread是一个单独的帖子,有自己的AsyncContext

using (var thread = new AsyncContextThread())
{
  // Queue work to the thread.
  thread.Factory.Run(async () =>
  {
    ... // any awaits in here resume on the same thread.
  });
  await thread.JoinAsync(); // or `thread.Join();`
}

AsyncContext提供了SynchronizationContext以及TaskScheduler / TaskFactory

答案 2 :(得分:0)

现在,通过.NET Core 3.0,您可以使用Dispatcher类,但是它仅在Windows以及netcoreapp3.0 TFM下可用,因此您不能在Linux或Mac上部署应用程序。

您应按照以下参数将其添加到CSharp项目中

<PropertyGroup>
   ...
   <UseWPF>true</UseWPF>
   ...
</PropertyGroup>

,然后您可以在应用程序中使用System.Windows.Threading.Dispatcher

答案 3 :(得分:0)

检查.csproj中的SDK参考是否指向Microsoft.NET.Sdk.WindowsDesktop,请参见here