1. 程式人生 > WINDOWS開發 >初試WPF程式碼遷移Core WPF

初試WPF程式碼遷移Core WPF

原文:初試WPF程式碼遷移Core WPF

最近2年一直能看到 Net Core的介紹,看到支援WPF和Winform引起了興趣,寫簡單Demo執行看效果和了解部署。

現在準備把專案正式遷移到.Net Core,就先用了一個比較單一的專案試試,編譯很大部分很順利通過,沒有什麼需要注意,

也就沒有什麼印象,一執行不得了各種報錯。 也沒有去看具體原因,先直接解決讓程式執行正常。

一、BeginInvoke

?
12345678public 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.”
改後代碼:

?
12345678public 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

?
1234567var valueTimer = new System.Windows.Threading.DispatcherTimer();valueTimer.Interval =
new TimeSpan(0,100);valueTimer.Tick += (obj,e) =>{ChangeRecognitionValue(() => { valueTimer.Stop(); });};valueTimer.Start();

執行沒有效果,直接改為下面:

?
123456var 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,不支援…?