簡體   English   中英

是否不可能從非UI線程顯示FolderBrowserDialog?

[英]Is it not possible to show a FolderBrowserDialog from a non-UI thread?

我在顯示從非UI線程創建和調用的FolderBrowserDialog實例時遇到問題。 無法正確渲染。

更具體地講,它不顯示文件夾樹,而僅顯示 確定 新文件夾”和“ 取消”

替代文字

所有的外殼程序對話框,包括FolderBrowserDialog,都需要將線程設置為STA的COM公寓。 您可能缺少Thread.SetApartmentState()調用:

    private void button1_Click(object sender, EventArgs e) {
        var t = new Thread(() => new FolderBrowserDialog().ShowDialog());
        t.IsBackground = true;
        t.SetApartmentState(ApartmentState.STA);
        t.Start();
    }

請注意,您無法設置對話框的所有者,它很容易在另一個應用程序的窗口后面丟失。 這使得在工作線程上顯示表單或對話框不是一個好主意。

我不確定您為什么要這樣做。 在工作線程上,用於計算的所有必要值都應該可用。 無需用戶交互即可獲得更多輸入。
也許重新設計在您的情況下會更有幫助。 在啟動之前,請考慮將選定的文件夾提供給工作線程。

編輯(回復評論):
如果您想做一些記錄,我的答案仍然適用。 您的工作線程應該知道在哪里記錄異常,而不是開始詢問用戶。
您是否使用日志記錄框架? 如果不是,請看一下log4net 在這里,您通常在xml文件中預配置日志記錄(日志級別,路徑,格式等)。 無需用戶交互。 盡管用戶可以更改日志記錄路徑(在xml文件中)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM