2016-11-29 5 views
0

Application.OpenForms.Countが変更されたときに火事を起こそうとしていますか?システム変数のイベントを発生させるにはどうすればよいですか?

+0

事前に構築されたリスナーがあるかどうかはわかりませんが、ループチェック中に非同期にスレッドを実行し、数値の変更によって非同期の結果が返され、そのイベントが発生したと思われます。 –

+2

解決するために[Rx](https://msdn.microsoft.com/en-us/library/hh242985(v = v103).aspx)の問題を作成しました。 –

+0

この質問に適切なタグを設定してください。そしてあなたは[ask]を読んでくださいできますか? – Enigmativity

答えて

2

これはRxでこれを非常に簡単に行う方法です。まず、NuGet「System.Reactive.Windows.Forms」、そしてあなたがこれを行うことができます。

IDisposable subscription = 
    Observable 
     .Interval(TimeSpan.FromMilliseconds(100.0)) 
     .Select(n => Application.OpenForms.Count) 
     .DistinctUntilChanged() 
     .Subscribe(count => 
     { 
      /* Changed so do something here */ 
      Console.WriteLine(count); 
     }); 

これは明らかに、あなたのニーズに適しTimeSpanを選択する必要があるので、ポーリングベースのソリューションです。

サブスクリプションを停止するには、アプリケーションを終了するときにsubscription.Dispose();に電話するだけです。

1

あなたは簡単にそれにフックすることはできません。より良い方法は、Formの独自のサブクラスを作成し、それをベースとして使用することです。あなたのユースケースに当てはまるイベントであなた自身のカウンターを増減します。

+0

ありがとう、ありがとう、問題は私は1000のフォームが含まれているプロジェクトのために必要です、私はすべてのクラスを変更するアクセス権がありません。 –

+2

@PouriaSharifおそらくあなたは、あなたが達成したいと思っていることをあなたの質問で説明すべきです。 –

+0

あなたは正しいです。どうもありがとう –

関連する問題