c# - Calling Windows Form Show() method using reflection crash -
i have following class (exposed com) using wrapper show forms called vb6.
public class netform : inetform { public netform(assembly assembly, string name, object[] parameters) { assembly = assembly; name = name; createinstance(parameters); } private assembly assembly { get; set; } private string name { get; set; } private form instance { get; set; } private void createinstance(object[] parameters) { type type = assembly.gettype(name); type[] types = new type[parameters.length]; (int idx = 0; idx < parameters.length; idx++) types[idx] = parameters[idx].gettype(); constructorinfo ci = type.getconstructor(types); instance = (form)ci.invoke(parameters); } public void show() { instance.visible = true; instance.show(); // crashing } public void showdialog() { instance.showdialog(); // works } } public class netassembly { public netassembly(string fullname) { init(fullname); } private assembly assembly { get; set; } private void init(string name) { assembly = assembly.loadfrom(name); } public netform getform(string namespace, string name, object[] parameters) { name = string.concat(namespace, ".", name); return new netform(assembly, name,parameters); } } - showdialog() works perfectly.
- show() not being displayed if visible property not set true. when setting true, form partially being displayed , crash after few seconds.
i using unittestproject check it:
[testclass] public class netformunittest { [testmethod] public void showtestmethod() { var assembly = new netassembly(assemblyfullname); var form = assembly.getform(namespace, formname, new object[] { "item1" }); form.show(); } } what correct way call show() method?
your form needs message pump (like application.run creates). reason showdialog creates own message loop.
so adding application.run(forminstance) should solve problem.
Comments
Post a Comment