3

キューを含むクラスとリストボックスを含むフォームがあります。

ユーザーがフォームを開くと、蓄積されたすべてのオブジェクトがキューから取得され、リストボックスに表示されます。キューが新しいアイテムを取得するとすぐにフォームが開いている間、カスタムイベントを介して新しいアイテムのフォームに通知します。

フォームを閉じた後、データは再び蓄積されます。

私の問題は次のとおりです。フォームが通知イベントにサブスクライブされるとすぐに、すべてのキューをフォームにダンプし、誰かがイベントにサブスクライブしている限り、フォームをダンプし続ける必要があります。別のアイテムがキューに追加されるまで待つべきではありません。

1つの解決策は、タイマーを使用してイベントへのサブスクリプションがあるかどうかを確認し、それをダンプすることです。それほど多くはありませんが、タイマーでリソースを浪費することになります。

フォームのイベントへのサブスクリプション自体がイベントをトリガーできると、より良いように思われます。アプリは非常にモジュール化されており、モジュールはイベントを介してeventNexusと通信し、ネクサスは知る必要のあるすべての人に通知します。

イベントもオブジェクトなので、こういうことはできるはずなのに、なんとかリンクが見つかりませんでした。

4

2 に答える 2

6

addandremoveステートメントを使用して、イベント自体のコードでイベントハンドラーの追加と削除をカスタマイズできます。

private EventHandler onMyEvent;
public event MyEventHandler MyEvent
{
    add
    {
        // run when event handler is added ( += )
        onMyEvent = (MyEventHandler)Delegate.Combine(onMyEvent, value);

        // Add additional, custom logic here...
    }

    remove
    {
        // run when event handler is removed ( -= )
        onMyEvent = (MyEventHandler)Delegate.Remove(onMyEvent, value);
    }
}

ここでは、イベントハンドラーを追加または削除したときにアクションをトリガーする独自のコードを追加できます。

于 2013-03-25T14:12:26.660 に答える
0

タイマーについては、このコードで試すことができます

    private static System.Timers.Timer aTimer;

    aTimer = new System.Timers.Timer(10000);

    // Hook up the Elapsed event for the timer.
    aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);

    // Set the Interval to 2 seconds (2000 milliseconds).
    aTimer.Interval = 2000;
    aTimer.Enabled = true;

あなたの機能

    private static void OnTimedEvent(object source, ElapsedEventArgs e)
    {
        //Your treatment
    }
于 2013-03-25T14:03:12.403 に答える