[英]Is it not possible to show a FolderBrowserDialog from a non-UI thread?
所有的外殼程序對話框,包括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.