我有一个DLL文件,里面有一个方法,它创建一个FolderBrowserDialog并等待用户选择继续。这是它的代码:
public void setRoot() {
FolderBrowserDialog fbd = new FolderBrowserDialog();
if (fbd.ShowDialog() == DialogResult.OK)
{
root = fbd.SelectedPath;
searchRoot();
}
}
然而,在另一个程序中,我试图调用此方法,我让程序永远等待。我的猜测是调用程序正在等待FileBrowserDialog选择一个文件。这是输出: MethodInfo.Invoke(class object, parameters) 如何通过它并使调用程序选择该调用方法的目录?
答案 0 :(得分:2)
使用MethodInfo.Invoke
调用的方法与直接从代码调用的方法没有什么不同。与正在运行的代码相同的代码仍将在同一个线程上运行,具有与直接调用相同的权限。如果您的反射调用方法在没有反射的情况下正常工作时会挂起,那么 else 就会导致它。
从您的屏幕截图中看,您在控制台应用程序中运行它。我猜测其他应用程序,不是一个控制台应用程序,这意味着它有一个正在运行的消息泵等待Windows消息,使对话框工作。在控制台应用程序中运行Windows对话框不会那么容易。