最近2年一直能看到 Net Core的介紹,看到支持WPF和Winform引起了興趣,寫簡單Demo運行看效果和瞭解部署。 現在準備把項目正式遷移到.Net Core, 就先用了一個比較單一的項目試試,編譯很大部分很順利通過,沒有什麼需要註意, 也就沒有什麼印象,一運行不得了各種報錯。 也沒有去看具... ...
最近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(async () => { await 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,不支持…?