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.

.NET 事 件 模 型 教 程 ( 一 )<br />

目 录<br />

• 事 件 、 事 件 处 理 程 序 概 念<br />

• 问 题 描 述 : 一 个 需 要 较 长 时 间 才 能 完 成 的 任 务<br />

• 高 耦 合 的 实 现<br />

• 事 件 模 型 的 解 决 方 案 , 简 单 易 懂 的 VB.NET 版 本<br />

• 委 托 (delegate) 简 介<br />

• C# 实 现<br />

• 向 “.NET Framework 类 库 设 计 指 南 ” 靠 拢 , 标 准 实 现<br />

事 件 、 事 件 处 理 程 序 概 念<br />

在 面 向 对 象 理 论 中 , 一 个 对 象 ( 类 的 实 例 ) 可 以 有 属 性 (property, 获 取 或 设 置 对 象 的 状 态 )、 方 法 (method,<br />

对 象 可 以 做 的 动 作 ) 等 成 员 外 , 还 有 事 件 (event)。 所 谓 事 件 , 是 对 象 内 部 状 态 发 生 了 某 些 变 化 、 或 者 对 象 做<br />

某 些 动 作 时 ( 或 做 之 前 、 做 之 后 ), 向 外 界 发 出 的 通 知 。 打 个 比 方 就 是 , 对 象 “ 张 三 ” 肚 子 疼 了 , 然 后 他 站 在 空 地<br />

上 大 叫 一 声 “ 我 肚 子 疼 了 !” 事 件 就 是 这 个 通 知 。<br />

那 么 , 相 对 于 对 象 内 部 发 出 的 事 件 通 知 , 外 部 环 境 可 能 需 要 应 对 某 些 事 件 的 发 生 , 而 做 出 相 应 的 反 应 。 接 着 上 面<br />

的 比 方 , 张 三 大 叫 一 声 之 后 , 救 护 车 来 了 把 它 接 到 医 院 ( 或 者 疯 人 院 , 呵 呵 , 开 个 玩 笑 )。 外 界 因 应 事 件 发 生 而<br />

做 出 的 反 应 ( 具 体 到 程 序 上 , 就 是 针 对 该 事 件 而 写 的 那 些 处 理 代 码 ), 称 为 事 件 处 理 程 序 (event handler)。<br />

事 件 处 理 程 序 必 须 和 对 象 的 事 件 挂 钩 后 , 才 可 能 会 被 执 行 。 否 则 , 孤 立 的 事 件 处 理 程 序 不 会 被 执 行 。 另 一 方 面 ,<br />

对 象 发 生 事 件 时 , 并 不 一 定 要 有 相 应 的 处 理 程 序 。 就 如 张 三 大 叫 之 后 , 外 界 环 境 没 有 做 出 任 何 反 应 。 也 就 是 说 ,<br />

对 象 的 事 件 和 外 界 对 该 对 象 的 事 件 处 理 之 间 , 并 没 有 必 然 的 联 系 , 需 要 你 去 挂 接 。<br />

在 开 始 学 习 之 前 , 我 希 望 大 家 首 先 区 分 “ 事 件 ” 和 “ 事 件 处 理 程 序 ” 这 两 个 概 念 。 事 件 是 隶 属 于 对 象 ( 类 ) 本 身 的 ,<br />

事 件 处 理 程 序 是 外 界 代 码 针 对 对 象 的 事 件 做 出 的 反 应 。 事 件 , 是 对 象 ( 类 ) 的 设 计 者 、 开 发 者 应 该 完 成 的 ; 事 件<br />

处 理 程 序 是 外 界 调 用 方 需 要 完 成 的 。 简 单 的 说 , 事 件 是 “ 内 ”; 事 件 处 理 程 序 是 “ 外 ”。<br />

了 解 以 上 基 本 概 念 之 后 , 我 们 开 始 学 习 具 体 的 代 码 实 现 过 程 。 因 为 涉 及 代 码 比 较 多 , 限 于 篇 幅 , 我 只 是 将 代 码 中<br />

比 较 重 要 的 部 分 贴 在 文 章 里 , 进 行 解 析 , 剩 余 代 码 还 是 请 读 者 自 己 查 阅 , 我 已 经 把 源 代 码 打 了 包 提 供 下 载 。 我 也<br />

建 议 你 对 照 这 些 源 代 码 , 来 学 习 教 程 。[ 下 载 本 教 程 的 源 代 码 ]<br />

[TOP]<br />

问 题 描 述 : 一 个 需 要 较 长 时 间 才 能 完 成 的 任 务<br />

Demo 1A, 问 题 描 述 。 这 是 一 个 情 景 演 示 , 也 是 本 教 程 中 其 他 Demo 都 致 力 于 解 决 的 一 个 “ 实 际 问 题 ”:Worker<br />

类 中 有 一 个 可 能 需 要 较 长 时 间 才 能 完 成 的 方 法 DoLongTimeTask:<br />

using System;<br />

using System.Threading;

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

Saved successfully!

Ooh no, something went wrong!