Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 后台工作程序中的FolderBrowseDialog STAThread错误_C#_Winforms_Multithreading_Folderbrowserdialog - Fatal编程技术网

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

C# 后台工作程序中的FolderBrowseDialog STAThread错误,c#,winforms,multithreading,folderbrowserdialog,C#,Winforms,Multithreading,Folderbrowserdialog,你好 我得到了一个与这里讨论的非常相似的错误(在这里和其他地方的其他来源中): 区别在于,在我的例子中,我使用多线程。BackgroundWorker正在生成文档,完成后,将弹出一个FolderBrowseDialog,允许用户选择保存生成文档的位置。所以我能理解为什么我会收到这个错误。我之所以选择将folderbrowseddialog放入BackgroundWorker事件和相关代码中,是因为这样我就可以直接访问路径,而不是将字符串从一个线程传递到另一个线程 有趣的是,PrintDialog

你好

我得到了一个与这里讨论的非常相似的错误(在这里和其他地方的其他来源中):

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

有趣的是,
PrintDialog
可以工作,但是
SaveFileDialog
FolderBrowseDialog
抛出了这个错误

我只想听听你的想法。是否最好将
文件夹浏览对话框
移出
BackgroundWorker
代码?我是否应该实现自定义的
文件夹浏览对话框
?这有什么办法吗

提前感谢大家的意见和建议,并请大家花时间考虑我的问题;非常感谢


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


这是我在网上能找到的最接近的例子。在该示例中,Worker类用于存储SynchronizationContext。

太棒了,thanx!我用这种方法解决了这个问题。不确定这是否是最佳解决方案,但我使用
Worker.RunWorkerAsync(SynchronizationContext.Current)
启动了我的
BackgroundWorker
,然后在
DoWork
事件处理程序中,我将
dowworkeventargs
参数
对象取消装箱到
SynchronizationContext
并使用它显示对话框。是这样做的吗?它是有效的,但我不知道它是“良好实践”还是“标准惯例”: