很早知道using的对资源应用的作用,但一直就没有在实践中应用过.今天系统的理解了一下!
[1] 因为需要Lanuch起一个应用程序,对其后进行处理.但考虑到在正常Kill()它之前的操作用异常抛出.采用了如下的重用方案! 在重载的Dispose()中我们延迟了Kill()需要操作的应用程序.
public
class
TestProcess : IDisposable
{
private Process process;
public TestProcess(Process processToWrap)
{
process = processToWrap;
}
public Process Process
{
get
{
return process;
}
}
IDisposable Members#region IDisposable Members
public void Dispose()
{
if (process != null)
{
try
{
// give a bit of time if the process is exiting right now
process.WaitForExit(5000);
if (!process.HasExited)
{
// time to kill it
process.Kill();
}
}
catch (Exception)
{
// this is "best effort" to kill the process don't allow any exceptions to get thrown.
}
process = null;
}
}
#endregion
}
{
private Process process;
public TestProcess(Process processToWrap)
{
process = processToWrap;
}
public Process Process
{
get
{
return process;
}
}
IDisposable Members#region IDisposable Members
public void Dispose()
{
if (process != null)
{
try
{
// give a bit of time if the process is exiting right now
process.WaitForExit(5000);
if (!process.HasExited)
{
// time to kill it
process.Kill();
}
}
catch (Exception)
{
// this is "best effort" to kill the process don't allow any exceptions to get thrown.
}
process = null;
}
}
#endregion
}
[2] 启动被使用的程序,
使用using 后会自动调用Dispose()方法进行销毁
using
(TestProcess licAdminProcess
=
new
TestProcess(Process.Start(protectorPath)))
{
//这里我对已经Lanuch起来的程序开始一些其它的操作.如有异常,它不会阻止被使用程序的关闭!
}
{
//这里我对已经Lanuch起来的程序开始一些其它的操作.如有异常,它不会阻止被使用程序的关闭!
}