2009-07-13 12 views
4

他の開発者がUIイベントに応答する以外のデリゲートやイベントをどのように使用しているか、私は興味がありますか?私は、個人的には、UIイベントに応答する以外には使用しませんが、私はデリゲートやイベントの力を逃しているという強い感情を持っています。だから、私はSOコミュニティにこの質問を投げかけて、どうやってこれらのツールを私の兵器に加えることができるかについてのアイデアを得るかもしれない。どのようにUI以外のデリゲートやイベントを使用しますか?

答えて

1

イベントはかなり平凡です。ほとんどの場合、UIに応答して、または状態の変化についてユーザーに通知する必要があるコンポーネントを開発するときに、それらを使用します。ヤーン

しかし、参加者はすごくお得になります。おそらく最も一般的な使用法はLinqです。 Linqは場所のいたるところにラムダを使用しています。これは省略表現です。

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

aspxファイルでのその使用例:

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

いつでも表示される可能性のあるイベントをリスンしている場合は、非同期にソケットをリッスンしたり、XMLファイルを読み込んだりするときなどに使用することができます。

0

イベントは、設定できるあらゆる種類のステートマシンに最適です。各状態の変更ごとに異なるイベントを発生させ、プログラムがそれらの変更に反応できるようにします。

イベントのもう1つの用途は、新しいレコードが解析されたり、長期実行タスクからダウンロードされたときに通知することです。たとえば、大きなXMLファイルをダウンロードし、そこからレコードをパースするコントローラオブジェクトがあるとします。そのコントローラーがファイルから新しいレコードを正常に解析するたびにイベントを発生させることがあります。

0

長時間実行しているアプリケーションの現在の状態について、制御クラスに通知するイベントを使用しました。

私のケースでは、Windows CEデバイスを新しいファームウェアでアップデートしていましたが、最大15分かかることがあったので、コントローラが回線が更新されたときに通知して、イベント。

前述のように、別のスレッドで何が起こっているのかを知る必要がある場合、特に操作にかなりの時間がかかる場合は、イベントが役立ちます。

関連する問題