C# 在ASP.NET Core的BackgroundService中处理非托管回调
我正在尝试构建一个ASP.NET核心应用程序,该应用程序应该接收非托管代码中的信息,并将这些信息呈现给web用户。当ASP.NET核心应用程序启动时,它将启动后台服务,该服务将在非托管代码中注册回调 在主功能中,我已注册后台服务以启动:C# 在ASP.NET Core的BackgroundService中处理非托管回调,c#,asp.net-core,events,unmanaged,C#,Asp.net Core,Events,Unmanaged,我正在尝试构建一个ASP.NET核心应用程序,该应用程序应该接收非托管代码中的信息,并将这些信息呈现给web用户。当ASP.NET核心应用程序启动时,它将启动后台服务,该服务将在非托管代码中注册回调 在主功能中,我已注册后台服务以启动: public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); }
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
}).ConfigureServices(services =>
{
services.AddHostedService<ReadService>();
})
;
}
调用SetCallback函数时,非托管代码将开始侦听更新,但在开始侦听时返回
这会奏效吗?当回调被触发时,它会阻止代码的其余部分吗?我应该在OnNewUpdates中使用什么来向ExecuteAsync发出有新更新的信号
更新2020-11-02
也许我的问题不太清楚,所以更清楚地说:
- 我应该在ExecuteAsync函数中添加什么?什么都没有
- 将我的服务作为后台服务来实现是错误的吗
IHostedService
接口,而不是让线程忙于while循环,而while循环什么都不做。
public class ReadService: BackgroundService
{
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
public delegate void CSCALLBACK([In, MarshalAs(UnmanagedType.LPStr)] string a);
[DllImport("managed_service_wrapper", CallingConvention = CallingConvention.Cdecl)]
public static extern int SetCallback(CSCALLBACK callback);
public ReadService()
{
CSCALLBACK cb = OnNewUpdates;
var a = SetCallback(cb);
}
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
//something
}
}
static void OnNewUpdates(string a)
{
//something
}
}