내가 그들을 더 안전 할 IntPtr입니다 작업에 사용하고, 클래스이다SafeHandleZeroOrMinusOneIsInvalid 또는 SafeHandle을 올바르게 해제하는 방법? 내가 여기에 몇 가지 문서를 읽기 및
internal class MySafeHandleOperator : SafeHandleZeroOrMinusOneIsInvalid
{
public MySafeHandleOperator(IntPtr handle) : base(true)
{
SetHandle(handle);
}
public IntPtr GetPtr()
{
return this.handle;
}
protected override bool ReleaseHandle()
{
this.Dispose(true);
return true;
}
}
주요 질문은 ReleaseHandle 방법입니다. 나는 그런 식으로 사용했지만 이것이 올바른 사용법이라면 나는 분발되었다. 핸들을 해제하고이 클래스를 지우는 또 다른 올바른 방법이있을 수 있습니까?
내가 (간단한 예제)와 유사하게이 클래스를 사용하고 싶습니다 : 내가 바로 모든 일을 해요 경우 누군가를 살펴보고 말을하면
Process p = Process.Start(processName);
MySafeHandleOperator mh = new MySafeHandleOperator(p.MainWindowHandle);
가 감사 할 것인가 또는이 메서드를 다시 작성해야합니다.
괜찮습니다, 예를 들어, ['CloseHandle'] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms724211 (v = vs.85) .aspx). 'HWND'는 그런 종류의 핸들이 아닙니다. 세이프티 클래스에서 상속하여 패스 할 필요는 없습니다. 그 종류의 핸들이라면,'ReleaseHandle'에서'CloseHandle (this.handle)'을 호출 할 것입니다. 거기에서 물건을 처분하지 마십시오. – GSerg