考虑以下代码:
using (var mre = new ManualResetEvent(false))
{
var bgWkr = new BackgroundWorker();
bgWkr.DoWork += delegate(object sender, DoWorkEventArgs e)
{
var mrEvent = e.Argument as ManualResetEvent;
// some processing...
mrEvent.WaitOne();
// broadcast an event
};
bgWkr.RunWorkerAsync(mre);
// some other processing...
// hook into the same event
mre.Set();
}
假设生成的工人需要一些时间才能完成。当工作线程完成并等待 ManualResetEvent 时,我们将离开 using 块。我会假设离开 using 块时 mre 会被关闭(假设它会被处理),这至少会引发异常。这是一个安全的假设吗?
此示例可能不是使用 ManualResetEvent 的最佳示例,但它旨在说明我们在 using 块内访问匿名方法内的 IDisposable 对象并在退出 using 块后调用匿名方法的情况。是否有某种机制可以保留一次性物品?我不这么认为,但想确认一下为什么(如果有某种伏都教在起作用)或者为什么不。
干杯,