最近2年一直能看到 Net Core的介绍,看到支持WPF和Winform引起了兴趣,写简单Demo运行看效果和了解部署。
现在准备把项目正式迁移到.Net Core, 就先用了一个比较单一的项目试试,编译很大部分很顺利通过,没有什么需要注意,
也就没有什么印象,一运行不得了各种报错。 也没有去看具体原因,先直接解决让程序运行正常。
一、BeginInvoke
public static void DoWork(Action action, int millisecond = 500) { new Action(() => { System.Threading.Thread.Sleep(millisecond); Dispatcher.CurrentDispatcher.BeginInvoke(action); }).BeginInvoke(null, null); }
以前的写法运行就报错,System.PlatformNotSupportedException:“Operation is not supported on this platform.”
改后代码:
public static void DoWork(Action action, int millisecond = 500) { Task.Run(() => { Task.Delay(millisecond); Dispatcher.CurrentDispatcher.Invoke(action); }); }
Dispatcher.CurrentDispatcher.BeginInvoke(action);不会执行action,
也需要改为:Dispatcher.CurrentDispatcher.Invoke(action);
二、System.Windows.Threading.DispatcherTimer
var valueTimer = new System.Windows.Threading.DispatcherTimer(); valueTimer.Interval = new TimeSpan(0, 0, 0, 0, 100); valueTimer.Tick += (obj, e) => { ChangeRecognitionValue(() => { valueTimer.Stop(); }); }; valueTimer.Start();
运行没有效果,直接改为下面:
var valueTimer = new System.Timers.Timer(1 * 100); valueTimer.Elapsed += (obj, e) => { ChangeRecognitionValue(() => { valueTimer.Stop(); }); }; valueTimer.Start();
只是迁移一个控件,预览是否正常,瞬间不想去迁移。 因为.Net5又出来了,到时候直接往上面迁移。
PS: 准备测试.Net 5 第2个预览版 , 都准备好了 要求VS是16.6或者更新才可以,而我的是16.5.4,不支持…?