2009-07-13 10 views
4

我很好奇其他開發人員如何使用委託和/或事件而不是響應UI事件?我個人不會將它們用於除UI事件之外的其他任何事情,但我強烈地感覺到我錯過了代表和事件的力量。所以我向SO社區提出這個問題,以便我可以得到一些關於如何將這些工具添加到我的庫中的想法。您以何種方式使用UI以外的代理和/或事件?

回答

1

活動非常平凡。大多數情況下,您將使用它們來響應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)); 

當我使用他們,我最喜歡的是的HtmlHelper擴展方法混合渲染HTML代碼隱藏有:

/// <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; 
     } 
    } 

其在aspx文件中使用的示例:

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

在任何情況下,您正在傾聽可能隨時出現的事件;例如異步偵聽套接字,讀取XML文件等。

0

事件對於您可能設置的任何類型的狀態機都是完美的。您針對每個狀態更改發佈了不同的事件,從而允許您的程序對這些更改做出反應。

事件的另一種用法可能是讓您知道何時從某個長時間運行的任務中解析或下載了新記錄。例如,您可能有一個控制器對象,用於下載大型XML文件並從中解析記錄。每次成功解析文件中的新記錄時,您可能會讓該控制器觸發一個事件。

0

我已經使用事件來通知一些控制類關於長時間運行的應用程序中的當前狀態。

在我的情況下,我正在更新一個帶有新固件的Windows CE設備,它可能需要長達15分鐘,所以我會讓控制器知道何時更新了一行,並且會通過調用另一行來更新進度欄事件。

如前所述,如果您需要知道不同線程中發生了什麼,那麼事件會很有幫助,尤其是在操作需要大量時間的情況下。

相關問題