后台工作程序中的FolderBrowseDialog STAThread错误

时间:2012-02-10 10:53:26

标签: c# winforms multithreading folderbrowserdialog

美好的一天,

我收到的错误非常类似于此处讨论的错误(此处和其他地方的其他来源):STAThread missing, but it is there

不同之处在于我的情况是使用多线程。 BackgroundWorker生成文档,一旦完成,将弹出FolderBrowseDialog以允许用户选择保存生成的文档的位置。所以我能理解为什么我收到这个错误。我选择将FolderBrowseDialog放在BackgroundWorker事件和相关代码中的原因是因为我可以直接访问路径而不是将字符串从一个线程传递到另一个线程。

有趣的是,PrintDialog有效但SaveFileDialogFolderBrowseDialog会引发此错误。

我想听听你的想法。最好将FolderBrowseDialog移出BackgroundWorker代码吗?我应该实施自定义FolderBrowseDialog吗?有没有办法解决这个问题?

提前感谢您的意见和建议以及每个人花时间考虑我的问题;非常感谢。

亲切的问候

1 个答案:

答案 0 :(得分:2)

是否在RunWorkerCompleted回调中调用了FolderBrowseDialog,还是在DoWork回调中调用了它?如果您是从DoWork回调中调用它,则需要使用创建BackgroundWorker的SynchronizationContext并使用Send方法显示FolderBrowseDialog。

http://thedersen.com/2010/05/23/showing-modal-dialogs-from-a-background-thread/是我能在网上找到的最接近的例子。在该示例中, Worker 类用于存储SynchronizationContext。