タグ

2012年12月9日のブックマーク (2件)

  • 連載 One Point .NET -- デリゲート再入門(3/3) - @IT

    マルチキャスト デリゲートがメソッドの呼び出しと、それによって呼び出されるメソッドを切り離したことで、メソッドの呼び出しにはさまざまな付加機能を提供することができるようになった。Microsoftでは、デリゲートに2種類の付加機能を提供している。その1つがマルチキャストである。ここでのマルチキャストとは、1度のメソッド呼び出しに対して、実際には複数のメソッドを呼び出す機能のことである。例えば次のコードを見てほしい。 using System; delegate void ShowMessageDelegate(string msg); class Callable { internal void ConcreteShowMessage(string msg) { Console.WriteLine(msg); } } class Caller { internal ShowMessageD

    serian
    serian 2012/12/09
    共通言語ランタイムが管理しているスレッドプール/「BeginInvokeとEndInvokeは必ず対で呼び出さなければならない」
  • WinFormsとTimerとThreadingと - Neutral Scent

    例えば、こんなアプリケーションがあったとします。 DataSetにデータを蓄えて、DataViewで絞り込んだ複数のビュー(UI)があり、データの更新に合わせてぐわわっと複数の更新メソッドが走る。 DelegateやDataBindingsってのは便利なもので、この手のアプリが非常に簡単に作れます。 ところが、そこに落とし穴。 複数のデータ更新がが連続発生したとき、UIをばしばしと更新されるのは陶しいので、データの更新からUIの更新までにTimerで遅延処理を入れて、複数の更新をひとまとめにするような処理を入れたとします。 このとき、一つのデータを表示する複数のViewが同時に更新を行おうとした場合、一つしかないUIスレッドの持つ複数のSystem.Windows.Forms.Timerの動作がすちゃらかになるようです。 具体的には、他のTimerのTickによって、より早くイベントが発

    WinFormsとTimerとThreadingと - Neutral Scent
    serian
    serian 2012/12/09
    「非同期にTimer呼び出すときは、System.Windows.Forms.Timerは使わない方がよさげ」