[問題] WPF 與BackgroudWorker類似的方法

看板C_Sharp (C#)作者 (yang~hi)時間9年前 (2016/04/14 14:19), 9年前編輯推噓1(103)
留言4則, 2人參與, 最新討論串1/1
想請問WPF應用上有沒有和BackgroudWorker效果相同的其他方法 我曾使用Backgroundworker讓視窗按下按鈕後執行onclick方法時, 方法執行的過程中可以設成一邊回報進度到視窗的ProgressBar, 讓ProgressBar在方法執行過程中視窗不會被鎖死而能夠持續顯示進度變化, -- 另外發現如果用 Thread w = new Thread(() =>{ // 邊執行方法邊設定Progressbar進度Value或其他UI物件狀態 }); 好像會因為無法跨執行緒操控UI物件, 所以會出現Exception: 呼叫執行緒無法存取此物件 因為此物件屬於另一個執行緒。 而若是用 Action methodDelegate = delegate() { // 邊執行方法邊設定Progressbar進度Value或其他物件狀態 }; this.Dispatcher.BeginInvoke(methodDelegate); 或 Task task = new Task(() => { ProgressBar物件名稱.Dispatcher.Invoke(DispatcherPriority.ApplicationIdle , new Action(() => { // 邊執行方法邊設定Progressbar進度Value或其他物件狀態 })); }); task.Start(); 則方法執行過程中,跟使用一般方法一樣,使用者介面會被鎖住, 到了方法完全執行完後才會顯示最後一次設定的進度, 中間過程的設定進度都會因為被鎖住而無法呈現 -- 想請問除了Backgroundworker之外, 還有其他方式能達到, 在方法執行過程中還能動態設定使用者介面產生變化嗎? 謝謝~ -- ~ Sent from my PCMan Combo ~ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 210.59.165.123 ※ 文章網址: https://www.ptt.cc/bbs/C_Sharp/M.1460614796.A.46D.html ※ 編輯: name2name2 (210.59.165.123), 04/14/2016 15:07:01

04/14 15:20, , 1F
"執行方法"與"進度通知"應該分開來,前者用其他執行緒做
04/14 15:20, 1F

04/14 15:20, , 2F
後者才是Dispatcher去委派
04/14 15:20, 2F

04/14 15:21, , 3F
另外,在WPF裡面,最好是習慣MVVM的寫法
04/14 15:21, 3F
感謝回覆 ※ 編輯: name2name2 (210.59.165.123), 04/14/2016 15:45:07 紀錄其他找到的一些東西 Is there an alternative to use the Background Worker in WPF? http://goo.gl/rqf1Iu ※ 編輯: name2name2 (210.59.165.123), 04/15/2016 10:24:37

05/02 22:49, , 4F
thread裡面呼叫dispatcher.begininvoke呢?
05/02 22:49, 4F
文章代碼(AID): #1N3pQCHj (C_Sharp)
文章代碼(AID): #1N3pQCHj (C_Sharp)