C# 调用一个需要用户输入以处理的方法

C# 调用一个需要用户输入以处理的方法,c#,invoke,blocking,methodinfo,C#,Invoke,Blocking,Methodinfo,我有一个DLL文件,里面有一个创建FolderBrowser对话框并等待用户选择继续的方法。代码如下: public void setRoot() { FolderBrowserDialog fbd = new FolderBrowserDialog(); if (fbd.ShowDialog() == DialogResult.OK) { root = fbd.SelectedPath;

我有一个DLL文件,里面有一个创建FolderBrowser对话框并等待用户选择继续的方法。代码如下:

        public void setRoot() {
        FolderBrowserDialog fbd = new FolderBrowserDialog();
        if (fbd.ShowDialog() == DialogResult.OK)
        {
            root = fbd.SelectedPath;
            searchRoot();
        }
    }
然而,在另一个程序中,我试图调用这个方法,我让程序永远等待。我猜调用程序正在等待FileBrowser对话框选择一个文件。这是输出: 我怎样才能越过它,让调用程序为被调用的方法选择目录

使用MethodInfo.Invoke调用的方法与直接从代码调用的方法没有区别。它与正在运行的代码相同,仍将在同一线程上运行,具有与直接调用相同的权限。如果您的反射调用的方法在没有反射的情况下正常工作时挂起,则是其他原因造成的

从您的屏幕截图来看,您正在控制台应用程序中运行它。我猜另一个应用程序不是控制台应用程序,这意味着它有一个正在运行的消息泵等待Windows消息,使对话框工作。在控制台应用程序中运行Windows对话框并不容易。

使用MethodInfo.Invoke调用的方法与直接从代码调用的方法没有什么不同。它与正在运行的代码相同,仍将在同一线程上运行,具有与直接调用相同的权限。如果您的反射调用的方法在没有反射的情况下正常工作时挂起,则是其他原因造成的


从您的屏幕截图来看,您正在控制台应用程序中运行它。我猜另一个应用程序不是控制台应用程序,这意味着它有一个正在运行的消息泵等待Windows消息,使对话框工作。在控制台应用程序中运行Windows对话框不会这么容易。

先给我们看一些代码,然后再给我们看一些代码。我在Main之前添加了[StatThread],是的,它确实弹出了GUI。但是,我正在设计一个测试多个DLL的应用程序。我怎样才能让它测试多个文件而不被任何需要用户输入的方法挂起呢?我在Main之前添加了[StatThread],是的,它确实弹出了GUI。但是,我正在设计一个测试多个DLL的应用程序。我如何让它测试多个文件而不挂起任何需要用户输入的方法?