看板 C_Sharp 關於我們 聯絡資訊
想請問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
Litfal: "執行方法"與"進度通知"應該分開來,前者用其他執行緒做 04/14 15:20
Litfal: 後者才是Dispatcher去委派 04/14 15:20
Litfal: 另外,在WPF裡面,最好是習慣MVVM的寫法 04/14 15:21
感謝回覆 ※ 編輯: 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
hatasum: thread裡面呼叫dispatcher.begininvoke呢? 05/02 22:49