【发布时间】:2014-01-14 20:31:19
【问题描述】:
我有一个 DLL SomeLib.dll,其中包含一个 DeleteHandler 对象:
public class DeleteHandler
{
private _handlerToServerObj;
public DeleteHandler()
{
_handlerToServerObj = new HandlerToServerObj(/* ... */);
_handlerToServerObj.OnDelete += new OnDeleteEventHandler(OnDeleteEH);
}
public void Delete(string id)
{
_handlerToServerObj.Delete(id);
}
private void OnDeleteEH(string id)
{
//
}
}
它是如何工作的:
-
_handlerToServerObj.Delete(id)正在向服务器发送消息,调用立即返回; - 服务器成功删除项目后,会触发
OnDelete事件。
此库通常由WinForms 应用程序使用。
通常,我希望Delete() 方法在服务器确实删除项目后返回(即,OnDelete 事件被触发,因此,OnDeleteEH被执行)。
我尝试使用ManualResetEvent,但没有成功(即从未调用过OnDeleteEH):
private ManualResetEvent _waitHandle = new ManualResetEvent(false);
public void Delete(string id)
{
_waitHandler.Reset();
_handlerToServerObj.Delete(id);
_waitHandle.WaitOne();
}
private void OnDeleteEH(string id)
{
//
_waitHandle.Set();
}
或者:
private ManualResetEvent _waitHandle = new ManualResetEvent(false);
public void Delete(string id)
{
_waitHandler.Reset();
Thread thread = new Thread(PrivateDelete);
thread.Start(id);
_waitHandle.WaitOne();
}
private void PrivateDelete(string id)
{
_handlerToServerObj.Delete(id);
}
private void OnDeleteEH(string id)
{
//
_waitHandle.Set();
}
这个设计有效吗?如果是,我在实施时犯了哪些错误?如果没有,您能否提出更正建议?
[编辑 1]
更正了代码中的一些错误。
【问题讨论】:
标签: c# .net events event-handling synchronization