最近在学习SharpDevelop源代码,看到一处访问文件的很有美感的代码,特此供大家一起分享:
public sealed class CallbackOnDispose : IDisposable
{
Action callback;public CallbackOnDispose(Action callback)
{
if (callback == null)
throw new ArgumentNullException("callback");
this.callback = callback;
}public void Dispose()
{
Action action = Interlocked.Exchange(ref callback, null);
if (action != null) {
action();
#if DEBUG
GC.SuppressFinalize(this);
#endif
}
}#if DEBUG
~CallbackOnDispose()
{
Debug.Fail("CallbackOnDispose was finalized without being disposed.");
}
#endif
}
此处定义一个实现IDisposable接口的回调方法的类。调用的时候如下:
using (LockPropertyFile())
{
using (FileStream fs = new FileStream(fileName, FileMode.Create, FileAccess.Write, FileShare.None))
{
ms.WriteTo(fs);
}
}
public static IDisposable LockPropertyFile()
{
Mutex mutex = new Mutex(false);
mutex.WaitOne();
return new CallbackOnDispose(
delegate {
mutex.ReleaseMutex();
mutex.Close();
});
}
时间: 2024-10-20 09:57:44