2016-10-01 3 views
0

У меня есть DLL-файл, в котором есть метод внутри него, который создает FolderBrowserDialog и ждет, пока пользовательский выбор будет продолжен. Вот его код:C#: MethodInfo.Invoke метод, который требует ввода от пользователя для обработки

 public void setRoot() { 
     FolderBrowserDialog fbd = new FolderBrowserDialog(); 
     if (fbd.ShowDialog() == DialogResult.OK) 
     { 
      root = fbd.SelectedPath; 
      searchRoot(); 
     } 
    } 

Однако, по другой программе я пытаюсь вызвать этот метод, и я получаю программу ждать вечно. Я предполагаю, что вызывающая программа ждет FileBrowserDialog, чтобы выбрать файл. Это результат: MethodInfo.Invoke(class object, parameters) Как я могу пройти мимо этого и сделать вызывающую программу выбрать каталог для этого вызванного метода?

+0

Начните с отображения кода – user3185569

+0

Только что отредактировано. – Everyone

ответ

2

Метод, называемый MethodInfo.Invoke, не отличается от метода, вызываемого непосредственно из кода. Это тот же самый код, который выполняется, все равно будет работать в одном потоке с теми же правами, что и прямой вызов. Если ваш метод отражения, зависающий при работе, отлично работает без отражения, есть что-то else, которое вызывает его.

С вашего скриншота видно, что вы используете его в консольном приложении. Я предполагаю другое приложение, это не консольное приложение, а это значит, что у него есть работающий насос сообщений, ожидающий сообщений Windows, заставляя работать диалог. Запуск диалоговых окон Windows в консольном приложении не будет работать так легко.

+0

Я добавил [STAThread] перед моей основной, и да, он выскочил из графического интерфейса. Однако я разрабатываю приложение, которое проверяет несколько DLL. Как я могу заставить его проверять несколько файлов без зависания любым методом, который требует ввода пользователя? – Everyone

Смежные вопросы