在百度,外国的网站搜索了好久,都没有找到合适的答案,其实这个问题应该也有好多人遇到,就是没人回答,甚至说着说着就没有下文了,也有答非所问,又或者是直接什么直接 new FolderBrowserDialog()
我真想给他一个 “papa” 下去,谁不会用这个呀,人家的问题时 为啥使用了FolderBrowserDialog这个窗体还是打开不了,而且其返回的ShowDialog 的值一直都是Cancel ,有人说是因为加入了皮肤插件IrisSkin2,这个是我一开始认同的问题(因为我这个系统也用到了这个皮肤插件IrisSkin2),也就是这位老兄说的
加入皮肤后就弹不出来了,而解决答案却不了了之,没人回答他的问题,就这样这个沉下去了,而大多数认为可以解决问题是因为把这个原来的Any CPU改为x86,我是一直不认同这个答案的,改为x86可以打开,但是你说现在的电脑有多少人用32位的,所以这个是不可行的。这个问题我整整花了我两个小时都没完成,而且一直搞不懂为啥没有人提出这个问题给好一点的解决方案呢。最后在一个https://www.jb51.net/article/43827.htm貌似看到我要的答案,最后就根据这老兄提供的信息,在根据自己的实际问题终于找到解决方案,其问题所在。
罪魁祸首在这,如果没有ApartmentState.STA,或者是没有添加STAThreadAttribute标识,就会导致这样的的问题,我们默认创建的新项目的窗口起始Mian方法是有STAThreadAttribute标识的,所以他们测的时候不知所以然都说直接 new FolderBrowserDialog() 没问题,其我一直在想起始打开的窗体已经引用这个STAThreadAttribute标识按道理是可以后面不用在设置的,不知为什么用这个FolderBrowserDialog的时候就没了,最终我就跟那个老兄的一样新建一个线程,然后在重新给它STAThreadAttribute的标识。
但是我们又引用了异步,好像这个不太符合我现在的,但起码也解决了打开的问题,最后我又优化了一下
这样用Thread.Join 继续当前的线程,然后跟后面的异步没有冲突,完美的解决了这个问题。