Events 除了在UI中使用委托和/或事件外,您还以什么方式使用它们?

Events 除了在UI中使用委托和/或事件外,您还以什么方式使用它们?,events,delegates,coding-style,Events,Delegates,Coding Style,我很好奇,除了响应UI事件之外,其他开发人员如何使用委托和/或事件?一、 就个人而言,除了响应UI事件之外,不要将它们用于任何其他用途,但我有一种强烈的感觉,那就是我错过了委托和事件的力量。因此,我向So社区提出了这个问题,以便我能够了解如何将这些工具添加到我的武库中。在任何情况下,如果您正在收听可能随时出现的事件;例如异步侦听套接字、读取XML文件等。事件适用于您可能设置的任何类型的状态机。您为每个状态更改触发不同的事件,使您的程序能够对这些更改做出反应 事件的另一个用途可能是让您知道何时从某

我很好奇,除了响应UI事件之外,其他开发人员如何使用委托和/或事件?一、 就个人而言,除了响应UI事件之外,不要将它们用于任何其他用途,但我有一种强烈的感觉,那就是我错过了委托和事件的力量。因此,我向So社区提出了这个问题,以便我能够了解如何将这些工具添加到我的武库中。

在任何情况下,如果您正在收听可能随时出现的事件;例如异步侦听套接字、读取XML文件等。

事件适用于您可能设置的任何类型的状态机。您为每个状态更改触发不同的事件,使您的程序能够对这些更改做出反应


事件的另一个用途可能是让您知道何时从某个长期运行的任务中解析或下载了新记录。例如,您可能有一个控制器对象,用于下载一个大型XML文件并解析其中的记录。您可以让该控制器在每次成功解析文件中的新记录时触发事件

我使用事件通知一些控制类长时间运行的应用程序中的当前状态

在我的例子中,我正在用新固件更新windows CE设备,这可能需要15分钟,因此我会让控制器知道线路何时更新,它会通过调用另一个事件来更新进度条


如前所述,如果您需要知道不同线程中发生了什么,那么事件可能会很有帮助,特别是如果操作可能需要大量时间。

事件非常平凡。大多数情况下,您将使用它们来响应UI或开发必须通知用户状态更改的组件。打哈欠

然而,代表们充满了令人敬畏和胜利。可能最常用的是Linq。Linq到处使用lambda,它们是速记代理

var numbers = new int[]{1,2,3,4,5};
var evenStevens = numbers.Where(x => x % 2 == 0);
另一个常见用途是多线程:

ThreadPool.QueueUserWorkItem(o => DoWork(o));
我最喜欢使用的是混合呈现html和代码隐藏的HtmlHelper扩展方法:

    /// <summary>
    /// Helps render a simple list of items with alternating row styles
    /// </summary>
    /// <typeparam name="T">The type of each data item</typeparam>
    /// <param name="html">The HtmlHelper.</param>
    /// <param name="rows">The list of items</param>
    /// <param name="rowTemplate">The row template.</param>
    /// <param name="evenCssClass">The even row CSS class.</param>
    /// <param name="oddCssClass">The odd row CSS class.</param>
    public static void SimpleList<T>(
        this HtmlHelper html,
        IEnumerable<T> rows,
        Action<T, string> rowTemplate,
        string evenCssClass,
        string oddCssClass)
    {
        var even = false;
        foreach (var row in rows)
        {
            rowTemplate(row, even ? evenCssClass : oddCssClass);
            even = !even;
        }
    }
//
///帮助呈现具有交替行样式的简单项目列表
/// 
///每个数据项的类型
///HtmlHelper。
///项目清单
///行模板。
///偶数行CSS类。
///奇数行CSS类。
公共静态空单体列表(
这个HtmlHelper html,
数不清的行,
操作行模板,
字符串evenCssClass,
字符串oddCssClass)
{
var偶数=假;
foreach(行中的变量行)
{
行模板(行、偶数?偶数类:oddCssClass);
偶数=!偶数;
}
}
其在aspx文件中的使用示例:

<div id="nodes" class="scrollingBlock">>
    <%  Html.SimpleList(
          Model.Nodes,
          (d, css) =>
          {%>
      <div class='<%=css%>'><%=d.Name %></div>
          <%}, "evenRow", "oddRow");%>
</div>
>
{%>