CrossThreadMessagingException WPF OpenFileDialog

时间:2014-02-06 20:36:04

标签: c# wpf debugging visual-studio-2012 openfiledialog

我得到了这个例外:

  

Microsoft.VisualStudio.Debugger.Runtime.CrossThreadMessagingException未处理HResult = -2146232832消息=发生异常'Microsoft.VisualStudio.Debugger.Runtime.CrossThreadMessagingException'    来源= Microsoft.VisualStudio.Debugger.Runtime    StackTrace:在Microsoft.VisualStudio.Debugger.Runtime.Main.ThrowCrossThreadMessageException(String formatString)   InnerException:

当我使用此代码时:

    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。

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

我在Visual Studio 2012中遇到多个启动项目的问题(CrossThreadMessagingException)。

如果您将一个项目分配为"可以在没有调试的情况下启动"这个问题可以在VS 2012中解决。

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