我的代码如下:string filePath=Application.StartupPath +dllFileName ;
try
{
Assembly assembly = Assembly.LoadFrom(filePath);
Type type = assembly.GetType(typeName);
System.Reflection.MethodInfo method = type.GetMethod("getInstance");
MessageBox.Show (frmClient.Text );
frmClient =(Form) method.Invoke(null,null ); frmClient.Dock=DockStyle.Fill ;
frmClient.FormBorderStyle =FormBorderStyle.None ;
frmClient.TopLevel =false;
frmClient.WindowState=FormWindowState.Maximized ;
panelRight.Controls.Clear ();
panelRight.Controls.Add (frmClient);
frmClient.Show();
return true;
}
其中frmClient是定义的一个全局的变量。我用上面的方式初始化这个变量后在这个方法中使用它可以,但是在另一个方法中则出现未将对象引用设置到对象实例。调用的方法如下:private void CleareControlText(string dllFileName,string typeName)
{
string filePath=Application.StartupPath +dllFileName ;
Assembly assembly = Assembly.LoadFrom(filePath);
Type type = assembly.GetType(typeName);
System.Reflection.MethodInfo method = type.GetMethod("CleareControlText");
method.Invoke (frmClient,null);
}
可method.Invoke (frmClient,null);这句放在上个方法的后面就可正常调用。
try
{
Assembly assembly = Assembly.LoadFrom(filePath);
Type type = assembly.GetType(typeName);
System.Reflection.MethodInfo method = type.GetMethod("getInstance");
MessageBox.Show (frmClient.Text );
frmClient =(Form) method.Invoke(null,null ); frmClient.Dock=DockStyle.Fill ;
frmClient.FormBorderStyle =FormBorderStyle.None ;
frmClient.TopLevel =false;
frmClient.WindowState=FormWindowState.Maximized ;
panelRight.Controls.Clear ();
panelRight.Controls.Add (frmClient);
frmClient.Show();
return true;
}
其中frmClient是定义的一个全局的变量。我用上面的方式初始化这个变量后在这个方法中使用它可以,但是在另一个方法中则出现未将对象引用设置到对象实例。调用的方法如下:private void CleareControlText(string dllFileName,string typeName)
{
string filePath=Application.StartupPath +dllFileName ;
Assembly assembly = Assembly.LoadFrom(filePath);
Type type = assembly.GetType(typeName);
System.Reflection.MethodInfo method = type.GetMethod("CleareControlText");
method.Invoke (frmClient,null);
}
可method.Invoke (frmClient,null);这句放在上个方法的后面就可正常调用。
它是常住内存的 所有类均可引用 使用前当然必须赋值
所以你应该在当前类的构造函数中初始化frmClient对象,这样就不会出错了。