C# 如何在RoslynPad中显示OpenFileDialog

C# 如何在RoslynPad中显示OpenFileDialog,c#,openfiledialog,.net-core-3.1,roslynpad,C#,Openfiledialog,.net Core 3.1,Roslynpad,我使用以下代码来显示OpenFileDialog使用,它编译并运行,但没有出现对话框,因此代码段将永远运行: \r“框架:Microsoft.WindowsDesktop.App” 使用System.Windows.Forms; var fd=新建OpenFileDialog { Filter=“解决方案文件(*.sln)|*.sln” }; 如果(fd.ShowDialog()==DialogResult.OK) Console.WriteLine(fd.FileName); 使用Rosly

我使用以下代码来显示
OpenFileDialog
使用,它编译并运行,但没有出现对话框,因此代码段将永远运行:

\r“框架:Microsoft.WindowsDesktop.App”
使用System.Windows.Forms;
var fd=新建OpenFileDialog
{
Filter=“解决方案文件(*.sln)|*.sln”
};
如果(fd.ShowDialog()==DialogResult.OK)
Console.WriteLine(fd.FileName);
使用RoslynPad使用
OpenFileDialog
的正确方法是什么

环境:

  • 操作系统:Windows 10 Pro 64位(2004)
  • RoslynPad:由最新的主分支构建
  • .NET核心:3.1.402

检查回购协议后,我可以通过添加以下行使
OpenFileDialog
工作:

wait Helpers.RunWpfAsync();
完整代码如下所示:

\r“框架:Microsoft.WindowsDesktop.App”
使用Microsoft.Win32;
等待帮助程序。RunWpfAsync();//初始化调度程序线程
var fd=新建OpenFileDialog
{
Filter=“解决方案文件(*.sln)|*.sln”
};
如果(fd.ShowDialog()==true)
Console.WriteLine(fd.FileName);

不确定这是否是最好的方法,但它确实有效

一个对话框总是需要一个所有者窗口,一个它可以停留在上面的窗口。“这个库中有一个无法解决的问题。@HansPassant我认为对话框不需要所有者窗口就可以工作。在Visual Studio(.Net Core 3.1 with
true
config in project)中使用此代码进行检查:
static void Main(){var fd=new OpenFileDialog();var result=fd.ShowDialog();Console.WriteLine(result);}
。首次使用该对话框时,OpenFileDialog有时会失败。VS中的默认文件夹可能设置不正确。如果不保存项目使用文件SaveAll,我有时会看到这种情况。其他时候,在使用ShowDialog之前,您需要设置默认文件夹。@jdweng当从Visual Studio运行时,我能够使其工作。但是在RoslynPad(一种轻量级编辑器)中,它不起作用。代码使用的是Windows对话框,而不是WinForm。请参阅GitHub上的source,了解如何使用模块顶部的语句:是的,这是正确的方法:)
RunWpfAsync
基本上创建一个WPF
Dispatcher
,然后按照
wait
运行它下面的所有内容。它也适用于Windows窗体。@EliArbel感谢您提供了一个很棒的开源项目。这对我帮助很大!