C# .Netstandard 2库,在UI线程上发送事件
我已将我的库转换为.netstandard 2 在转换库之前,我能够执行此代码以将库引发的事件与UI线程同步C# .Netstandard 2库,在UI线程上发送事件,c#,uwp,portable-class-library,.net-standard,C#,Uwp,Portable Class Library,.net Standard,我已将我的库转换为.netstandard 2 在转换库之前,我能够执行此代码以将库引发的事件与UI线程同步 await Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () => { MyEvent.Invoke(param1, param2); }); 但是转换
await Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
{
MyEvent.Invoke(param1, param2);
});
但是转换库时,这段代码会引发异常,因为它是平台特定的代码
有办法解决这个问题吗
我已尝试使用MyEvent.BeginInvoke(param1,param2,null,null)
但这会在运行时引发一个platforn不受支持的异常
现在为了解决这个问题,我正在同步UI线程上引发的事件。用户界面代码:
internal async void MyEvent()
{
await Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
{
SomeCode......
});
}
如何同步库中的线程?。NETStandard永远不会满足UI实现细节的要求。BeginInvoke()的作用完全相反,它在TP线程上运行委托目标。并且没有在.NETCore上实现。您应该进行同步。当前工作,在构造函数中复制它,并在UI线程上发布或发送运行代码。只要是在初始化类的UI线程上运行的代码就可以工作。每当您试图获取MainView
的CoreDispatcher
以便调用某些代码时,这是一个等待发生的错误——应用程序可以有多个视图(或者根本没有视图)…NETStandard永远不会满足UI实现细节。BeginInvoke()的作用完全相反,它在TP线程上运行委托目标。并且没有在.NETCore上实现。您应该进行同步。当前工作,在构造函数中复制它,并在UI线程上发布或发送运行代码。只要是在初始化类的UI线程上运行的代码就可以工作。每当您试图获取MainView
的CoreDispatcher
以便调用某些代码时,这是一个等待发生的错误——应用程序可以有多个视图(或者根本没有视图)。