初試WPF代碼遷移Core WPF

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

     如今準備把項目正式遷移到.Net Core, 就先用了一個比較單一的項目試試,編譯很大部分很順利經過,沒有什麼須要注意,async

也就沒有什麼印象,一運行不得了各類報錯。 也沒有去看具體緣由,先直接解決讓程序運行正常。測試

 

1、BeginInvokethis

 
   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.」
   改後代碼:  spa

 

 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,code

   也須要改成:Dispatcher.CurrentDispatcher.Invoke(action); orm

 

2、System.Windows.Threading.DispatcherTimer htm

         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();

運行沒有效果,直接改成下面:ip

         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,不支持…?

相關文章
相關標籤/搜索