我有一個WPF(MVVM)項目,其中有多個視圖模型,每個模型都有一個按鈕,可以在同一個數據源上啓動不同的分析,在這種情況下是一個文件。該文件不能共享,因此如果在同一時間按下按鈕,則第二次調用將失敗。在WPF中排隊事件的最佳實踐
我需要一種排列按鈕點擊的方法,以便每個分析都可以按順序運行,但似乎無法使其運行。我嘗試使用靜態的Semaphore
,SemaphoreSlim
和Mutex
,但它們似乎阻止了一切(Wait()
函數似乎阻止當前正在運行的分析)。我試着用一個靜態對象lock()
命令,但它似乎沒有阻止任何事件(我得到文件共享錯誤)。我也嘗試了一個線程池(最大併發線程數爲1),但它會更新UI的線程錯誤(這可能可以通過調用Invoke()
來解決)。
我的問題是WPF在這種情況下可能被認爲是最佳實踐嗎?
編輯:我創建了展示我遇到的問題的樣機。它在http://1drv.ms/1s4oQ1T。
按鈕按鈕應該已經通過WPF Dispatcher類排隊。你是否以某種方式在工作線程上啓動分析? – 2014-10-02 16:56:24
我沒有使用工作線程。我剛剛上傳了一個樣本。在真正的應用程序中,我們有一個使用Dispatcher調用來保持UI響應的進度條。 – 2014-10-06 20:39:22
您想對點擊進行排隊嗎,還是排列在點擊上做點什麼的任務? – 2014-10-06 21:05:20