如果您不熟悉Ookii.Dialogs,我建議您先look at this web page。它是開放源代碼,您可以在那裏找到源代碼,編譯後的二進制文件和示例應用程序。Ookii.Dialogs - 確保在進度對話框上方出現另一個對話框
在我的應用程序,我使用Ookii.Dialogs.Wpf.ProgressDialog到的ShowDialog(本)進展對話,做對文件進行一些處理(這始終是應用程序的主窗口)。正如預期的那樣,進度對話框實際上變得可見之前需要一秒左右的時間(即使它已經在處理我的文件)。
在DoWork線程的進度對話框中,我還檢查輸出文件是否已經存在並詢問用戶是覆蓋每個文件還是跳過輸出。我用Ookii.Dialogs.Wpf.TaskDialog到的ShowDialog(本)一個「任務對話框用命令鏈接」(貌似this),並詢問用戶的覆蓋問題 - 除非該操作系統不支持它,我回退到正常MessageBox(該問題適用於消息框以及)。
的問題,當我的應用程序找到現有的文件就在進度對話框的DoWork的線程的開始發生。當任務對話框出現詢問用戶是否覆蓋時:
預期行爲:任務對話框必須保持在最前。當進度對話框出現時(延遲1s後),它必須出現在任務對話框的後面。
實際行爲:任務對話框不保留在最前面。進度對話框在延遲1秒後出現時),它出現在任務對話框的頂部。
當進度對話框已經可見時,在後續的覆蓋請求中不會發生實際行爲。儘管用戶可以來回切換兩個對話框(不能從任何一個對話框切換到主窗口),但任務對話框在後續對話框的進度對話框頂部正確顯示。
我在尋找這樣的:
- 最好的解決辦法:使任務對話框上出現的進度模態對話框。如果用戶嘗試切換到進度對話框,則不允許用戶這樣做。
- 次優:即使進度對話框出現在1秒延遲之後,任務對話框的第一次出現仍保持在最前面。
我不尋找以下:
- 設置任務對話框的總是在最上層的標誌。我不希望任務對話框始終顯示在用戶計算機上的每個窗口之上。
- 在任務對話框出現之前添加延遲。我已經嘗試了Thread.Sleep()即使在一個循環中,它只是掛起了一切的執行,並沒有解決問題。
- 在顯示任務對話框之前,等待進度對話框出現。可以在理論上工作,除了我沒有找到方法來知道進展對話是否已經出現或沒有。
- 使對話框無模式。我希望他們都是模態。 (除了我已經嘗試使它們無模式;它並沒有幫助解決問題。)
- 一個解決方案,該解決方案僅適用於只有的任務對話框。它也必須適用於常規消息框。
解決問題的方法是使用進度對話框的窗口句柄作爲任務對話框的父級。不幸的是,Ookii.Dialogs目前沒有公開該功能(主要是因爲當我編寫這個庫時我沒有辦法得到它;結果是沒有文檔記載)。 – Sven 2012-03-07 04:32:39
@Sven':)'很高興收到你的來信!我可以在我自己的源代碼中使用未記錄的方式來獲取進度對話框的窗口句柄嗎?或者您是否必須在Ookii.Dialogs內部使用它來向我公開該句柄?另外,你想不久之後呢?謝謝! – ADTC 2012-03-07 07:02:57
您需要修改Ookii.Dialogs源代碼。我會考慮進行這些修改。 – Sven 2012-03-07 07:26:57