04.11.2014 Views

编程资料- 多线程 - 错误提示:发生了异常- 博客园

编程资料- 多线程 - 错误提示:发生了异常- 博客园

编程资料- 多线程 - 错误提示:发生了异常- 博客园

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

使 用 Hashtable 存 储 事 件 处 理 程 序<br />

private Hashtable handlers = new Hashtable();<br />

// 另 一 个 Hashtable 存 储 这 些 handler 对 应 的 事 件 类 型<br />

private Hashtable events = new Hashtable();<br />

protected void AddEventHandler(object eventKey, Delegate<br />

handler)<br />

{<br />

// 注 意 添 加 时 , 首 先 取 了 一 个 object 作 为 handler 的 key,<br />

// 并 分 别 作 为 两 个 Hashtable 的 键 。<br />

}<br />

lock(this)<br />

{<br />

object handlerKey = EventHandlerKey;<br />

handlers.Add( handlerKey, handler );<br />

events.Add( handlerKey, eventKey);<br />

}<br />

protected void RemoveEventHandler(object eventKey, Delegate<br />

handler)<br />

{<br />

// 移 除 时 , 遍 历 events, 对 每 一 个 符 合 eventKey 的 项 ,<br />

// 分 别 检 查 其 在 handlers 中 的 对 应 项 ,<br />

// 如 果 两 者 都 吻 合 , 同 时 移 除 events 和 handlers 中 的 对 应 项 。<br />

//<br />

// 或 许 还 有 更 简 单 的 算 法 , 不 过 我 一 时 想 不 出 来 了 :(<br />

handler )<br />

lock(this)<br />

{<br />

foreach ( object handlerKey in events.Keys)<br />

{<br />

if (events[ handlerKey ] == eventKey)<br />

{<br />

if ( (Delegate)handlers[ handlerKey ] ==<br />

}<br />

}<br />

}<br />

{<br />

}<br />

handlers.Remove( handlers[ handlerKey ] );<br />

events.Remove( events[ handlerKey ] );<br />

break;

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!