1

私は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 のようです。

これを数時間実行しようとしましたが、ある時点ですべての試行が終了します。さまざまなメソッドからタイマーを開始および停止する必要があるため、メソッドの外で宣言する必要があります。問題は次のとおりです。ここでは、静的メソッドをデリゲートとしてのみ宣言できます。メソッドが静的な場合、タイマーデリゲートメソッドで使用されるパラメーターを変更できません。

私の英語と説明が最善ではないことは承知していますが、私の言いたいことを理解していただければ幸いです。この機能を実現するにはどうすればよいですか? 問題は、クラスを呼び出す関数を変更してはならないことです。

4

1 に答える 1

0

タイマーを static と宣言する必要があるのはなぜですか? すべきではありません。クラスで通常の変数として宣言するだけです。

于 2012-06-26T08:50:47.717 に答える