2014-02-06 113 views
1

我得到这个异常:CrossThreadMessagingException WPF打开文件对话框

Microsoft.VisualStudio.Debugger.Runtime.CrossThreadMessagingException是未处理的HResult = -2146232832消息=例外 'Microsoft.VisualStudio.Debugger.Runtime.CrossThreadMessagingException' 发生 来源= Microsoft.VisualStudio.Debugger.Runtime 堆栈跟踪:在Microsoft.VisualStudio.Debugger.Runtime.Main.ThrowCrossThreadMessageException(字符串formatString的) 的InnerException:

W¯¯母鸡我用这个代码:

public string ShowOpenFileDialog(string initialPath, string filter = null) 
    { 
     var dialog = new OpenFileDialog() 
     { 
      InitialDirectory = Directory.Exists(initialPath) ? Path.GetDirectoryName(initialPath) : String.Empty, 
      FileName = File.Exists(initialPath) ? Path.GetFileName(initialPath) : String.Empty, 
      Filter = filter 
     }; 

     if (dialog.ShowDialog() == true) 
     { 
      return dialog.FileName; 
     } 

     return String.Empty; 
    } 
我没有明确使用多线程

,那么是什么原因造成的?它在调试过程中经常发生,但不是全部。我已经改变了大约一百万次的方法签名,因为我传递了ref/out参数,并认为它们可能是原因。

编辑:我从UI线程调用它。按钮在视图 - >命令在ViewModel - > ShowOpenFileDialog。

+0

你在哪里调用这个方法?在调试器/监视窗口中是否有可能调用它的内容? – Matt

+0

我从UI线程调用它。按钮在视图 - >命令在ViewModel - > ShowOpenFileDialog。我不确定你的意思是关于调试器/监视窗口(有些VS我还没有学过)。 –

+0

我也遇到过一些奇怪的调试器行为,我没有在我的工作环境中在家中的其他计算机上遇到(符号未在启动时加载,未找到源等)。我正在尝试修复VS,希望它能以某种方式解决这些问题。 –

回答

3

尽管我不确定为什么会发生这种情况,但我已经想出了如何解决我的问题。我的解决方案中有多个项目,并且我配置了两个启动项目(客户端+服务器)。当我通过调试启动这两个项目时,似乎调试器遇到问题。因此,我只是关闭对目前最不重要的项目的调试,所以调试器只能处理一个项目。

1

我有多个启动项目相同的问题(CrossThreadMessagingException)在Visual Studio 2012

这个问题可以在VS 2012来解决,如果你指定一个项目为“不开始调试”。

什么兴趣,这个问题在Visual Studio 2013中是不明显的。