私はC#とプログラミングにまったく慣れていません。現在、次の問題が発生しています。あなたが私を助けてくれることを願っています。現在、次のようなプログラムがあります。
public class myClass
{
public void SetSomething(Parameter)
{
///Here something is set
}
private void DoSomething()
{
///Here something is done using paramaters from the SetSomething()
}
public void Run()
{
DoSomething(); //this needs to be done periodicly after started one time
}
public void Stop()
{
//Stop doing something periodically
}
}
外部関数 (フォーム経由のユーザー入力) から SetSomething、Run、および Stop が呼び出されます。Run() が呼び出された場合、Stop() が呼び出されるまで定期的に DoSomething を実行する必要があります。問題は次のとおりです。これは現在のスレッドをブロックすべきではありません。したがって、Sleep(x) はオプションではありません。SetSomething パラメータは非常に頻繁に変更されるため、前に Stop() を呼び出し、後で別の Run() を呼び出すことは、DoSomething() のパラメータを変更するオプションではありません
ほとんどの場合、ここではタイマーが最適なソリューションです。ただし、このプログラムは Compact.Net フレームワークの WinCE6 で使用されるため、System.Timers 名前空間は使用できません。system.windows.forms.Timer を使用してみましたが、これは特定のイベントをトリガーしません (おそらく、間違ったスレッドにあるためです。フォームを作成していないため、変更してはなりません)。したがって、私の唯一のオプションは System.threading.timer のようです。
これを数時間実行しようとしましたが、ある時点ですべての試行が終了します。さまざまなメソッドからタイマーを開始および停止する必要があるため、メソッドの外で宣言する必要があります。問題は次のとおりです。ここでは、静的メソッドをデリゲートとしてのみ宣言できます。メソッドが静的な場合、タイマーデリゲートメソッドで使用されるパラメーターを変更できません。
私の英語と説明が最善ではないことは承知していますが、私の言いたいことを理解していただければ幸いです。この機能を実現するにはどうすればよいですか? 問題は、クラスを呼び出す関数を変更してはならないことです。