C#: MethodInfo.Invoke 需要用户输入才能处理的方法
C#: MethodInfo.Invoke a method that needs input from user to process
我有一个 DLL 文件,其中有一个方法可以创建 FolderBrowserDialog 并等待用户 selection 继续。这是它的代码:
public void setRoot() {
FolderBrowserDialog fbd = new FolderBrowserDialog();
if (fbd.ShowDialog() == DialogResult.OK)
{
root = fbd.SelectedPath;
searchRoot();
}
}
但是,在另一个程序上,我试图调用此方法,但我让程序永远等待。我的猜测是调用程序正在等待 FileBrowserDialog select 一个文件。这是输出:
MethodInfo.Invoke(class object, parameters)
我怎样才能克服这个问题并使调用程序 select 成为该调用方法的目录?
用 MethodInfo.Invoke
调用的方法与直接从代码调用的方法没有什么不同。它是 运行 中的相同代码,仍将在同一线程上 运行,具有与直接调用相同的权限。如果您的反射调用方法在没有反射的情况下正常工作时挂起,则有一些 else 导致了它。
从您的屏幕截图看来,您是 运行在控制台应用程序中安装它。我猜另一个应用程序不是控制台应用程序,这意味着它有一个 运行ning 消息泵等待 Windows 消息,使对话框正常工作。 运行 Windows 控制台应用程序中的对话框不会那么容易工作。
我有一个 DLL 文件,其中有一个方法可以创建 FolderBrowserDialog 并等待用户 selection 继续。这是它的代码:
public void setRoot() {
FolderBrowserDialog fbd = new FolderBrowserDialog();
if (fbd.ShowDialog() == DialogResult.OK)
{
root = fbd.SelectedPath;
searchRoot();
}
}
但是,在另一个程序上,我试图调用此方法,但我让程序永远等待。我的猜测是调用程序正在等待 FileBrowserDialog select 一个文件。这是输出: MethodInfo.Invoke(class object, parameters) 我怎样才能克服这个问题并使调用程序 select 成为该调用方法的目录?
用 MethodInfo.Invoke
调用的方法与直接从代码调用的方法没有什么不同。它是 运行 中的相同代码,仍将在同一线程上 运行,具有与直接调用相同的权限。如果您的反射调用方法在没有反射的情况下正常工作时挂起,则有一些 else 导致了它。
从您的屏幕截图看来,您是 运行在控制台应用程序中安装它。我猜另一个应用程序不是控制台应用程序,这意味着它有一个 运行ning 消息泵等待 Windows 消息,使对话框正常工作。 运行 Windows 控制台应用程序中的对话框不会那么容易工作。