Beginner Luck Ответов: 2

Есть ли лучший способ вызвать winform? С#


System.Reflection.Assembly asm;  
asm = System.Reflection.Assembly.LoadFrom("Test2.exe"); // get from different project but same application
var forms = (Form)Activator.CreateInstance(asm.GetType("Test2.Form1")); // call form
forms.Show(); // show form


Могу ли я вызвать Winform без использования CreateInstance
Поскольку создание экземпляра происходит очень медленно

Что я уже пробовал:

Я пытаюсь использовать систему.Отражение.Испускать

но в итоге все равно нужно использовать свойство

Метод создает = создает новый("свойство", тип.GetType ("тестирование.Form2"), new Type[] { typeof(object [])}, true);
(Форма)Активатор.Свойство(метод);

2 Ответов

Рейтинг:
2

Beginner Luck

Object[] args = новый объект[] { };

var forms1 = (форма)тип.GetType ("тестирование.Форма 2").InvokeMember(null, BindingFlags.DeclaredOnly | Флаг Bindingflags.Public | BindingFlags.Непубличные / BindingFlags.Экземпляр / BindingFlags.Метод createinstance, нуль, нуль, аргументов);
forms1.Показать();
Не уверен, что он чем-то отличается от активатора (формы).CreateInstance(метод), но он работает


Рейтинг:
1

Garth J Lancaster

да, в конце концов, вам все равно нужно использовать CreateInstance

.. это не значит, что вы не можете быть умнее, когда делаете это, хотя - если бы вы знали, что собираетесь загрузить тестирование.Форма 2 " от "Test2.Exe" когда ваша программа загружается, Вы можете "загрузиться" процесс в фоновом потоке, пока загружается ваш основной проект Winform (очень похоже на то, как подключаемая система загружает свои плагины из библиотек DLL в каталог)


Beginner Luck

Я видел ILGenerator, но нужно ли ему также CreateInstance ??

Garth J Lancaster

Я не знаю, извините, это *может быть * возможно, но быстрее ? попробуйте оба метода и сравните их