不是的, c#提供了AppDomain的概念。
解决方案 »
- datagridview如何实现刷新表格内容后,保留原来当前记录滚动位置?
- 浏览器载入一个aspx页面时GridView1如何绑定先显示空字段名?
- C# 数据库不能登录是什么原因
- dataGridView里面的数据插入数据库问题..
- 發現VS2005裡自帶的反匯編器
- MDI的问题!急!~
- 格式转换的问题,急!
- aspx页面里面如果在textbox里敲回车键之后,跳到另外一个textbox里面,再敲enter键,再跳回以前那个textbox里面啊??
- WebClient上传文件
- C#网络编程求助,急!!!
- 如何从Access本地数据库绑定返回的结果集(我给100分)
- 请问哪里有这种网站的源代码?
[Visual Basic]
' Set up the AppDomainSetup
Dim setup As New AppDomainSetup()
setup.ApplicationBase = "(some directory)"
setup.ConfigurationFile = "(some file)"' Set up the Evidence
Dim baseEvidence As Evidence = AppDomain.CurrentDomain.Evidence
Dim evidence As New Evidence(baseEvidence)
evidence.AddAssembly("(some assembly)")
evidence.AddHost("(some host)")' Create the AppDomain
Dim newDomain As AppDomain = AppDomain.CreateDomain("newDomain", evidence, setup)
[C#]
// Set up the AppDomainSetup
AppDomainSetup setup = new AppDomainSetup();
setup.ApplicationBase = "(some directory)";
setup.ConfigurationFile = "(some file)";// Set up the Evidence
Evidence baseEvidence = AppDomain.CurrentDomain.Evidence;
Evidence evidence = new Evidence(baseEvidence);
evidence.AddAssembly("(some assembly)");
evidence.AddHost("(some host)");// Create the AppDomain
AppDomain newDomain = AppDomain.CreateDomain("newDomain", evidence, setup);摘自msdn文档。
CreateDomain有多个重载方法,根据需要选用。
另外,可以参考MSDN里ObjectHandle的一段实例代码。
System.AppDomain myDomain = System.AppDomain.CreateDomain("MyAppDomain");
System.Runtime.Remoting.ObjectHandle formObjectHandle =
myDomain.CreateInstance("WindowsApplication3",
"WindowsApplication3.Form1");
WindowsApplication3.Form1 myDomainForm = (WindowsApplication3.Form1)
formObjectHandle.Unwrap();
myDomainForm.ShowDialog(this);
myDomainForm.Dispose();
System.AppDomain.Unload(myDomain);
比如我建立了一个名为dom的程序域
这时我MessageBox.show(AppDomain.CurrentDomain.GetHashCode().ToString()) ;显示为1(主程序域为0)。
之后我绑定并执行类,然后执行AppDomain.Unload(dom);
之后再运行MessageBox.show(AppDomain.CurrentDomain.GetHashCode().ToString()) ;显示仍然为1
不知道是怎么回事
出了什么错?
写一个比较简单的测试程序试试看吧。
先前删除不了是因为在调用CreateInstanceFrom后我调用了该函数生成的Ojbect的方法,是不是该调用导致了dll的代码仍然在主程序域中执行?
但我怎样调用才能确保dll的代码是在自己生成的AppDomain中运行?
================================================================CSDN 论坛助手 Ver 1.0 B0402提供下载。 改进了很多,功能完备!★ 浏览帖子速度极快![建议系统使用ie5.5以上]。 ★ 多种帖子实现界面。
★ 保存帖子到本地[html格式]★ 监视您关注帖子的回复更新。
★ 可以直接发贴、回复帖子★ 采用XML接口,可以一次性显示4页帖子,同时支持自定义每次显示帖子数量。可以浏览历史记录!
★ 支持在线检测程序升级情况,可及时获得程序更新的信息。★★ 签名 ●
可以在您的每个帖子的后面自动加上一个自己设计的签名哟。Http://www.ChinaOK.net/csdn/csdn.zip
Http://www.ChinaOK.net/csdn/csdn.rar
Http://www.ChinaOK.net/csdn/csdn.exe [自解压]
System.AppDomain myDomain = System.AppDomain.CreateDomain("idiot");
System.Runtime.Remoting.ObjectHandle formObjectHandle =
myDomain.CreateInstanceFrom(Application.StartupPath + "\\WindowsApplication3.dll",
System.Object o = formObjectHandle.Unwrap();
System.AppDomain.Unload(myDomain);
现在可以删除WindowsApplication3.dll了,删除是可以删除,但没达到我的目的。我只得到了一个System.Object按照MSDN中的DoCallBack函数三个例子中的第二个,确实可以在另一个AppDomain中执行代码,但我将例子中的类PingPong改未System.Windows.Forms.Form的派生类就不行,谁告诉我为什么?
专门为需要调用的DLL创建一个类DllRunClass
[Serializable]
public class DllRunClass
{
public DllRunClass(){}
public void RunDll()
{
//Dll执行代码
WindowsApplication3.Form1 form1 = new WindowsApplication3.Form1();
form1.ShowDialog();
form1.Dispose();
}
}
在主程序需要调用Dll时添加以下代码:
System.AppDomain myDomain = System.AppDomain.CreateDomain("idiot");
DllRunClass dllRunClass = new DllRunClass();
myDomain.DoCallBack(new System.CrossAppDomainDelegate(DllRunClass.RunDll));
System.AppDomain.Unload(myDomain);