###解決しました
C#
1/// <summary> 2/// メソッドを指定した一定の間隔で呼び出すタイマー 3/// actionに呼び出したいメソッドを入れる 4/// funcに終了する条件式を入れる 5/// </summary> 6/// <param name="interval">ミリ秒単位で呼び出し間隔を指定</param> 7/// <param name="action">呼び出したいメソッドを入れる</param> 8/// <param name="func">trueになったら終了。初期状態がtrueの場合タイマーは実行されない</param> 9private async void Timer(int interval, Action action, Func<bool> func) 10{ 11 if (!func()) await Task.Delay(interval); 12 while (!func()) 13 { 14 action(); 15 await Task.Delay(interval); 16 } 17}
C#
1Timer(1000, メソッド, () => 条件式);
以下、解決前に書いた質問
前提・実現したいこと
汎用のタイマーを作ろうとしています。
同じ事ができれば他の方法でも問題ないです。
該当のソースコード
C#
1/// <summary> 2/// メソッドを指定した一定の間隔で呼び出すタイマー 3/// </summary> 4private async void Timer(int interval, Action action, ??? ???) 5{ 6 if (???) await Task.Delay(interval); 7 while (???) 8 { 9 action(); 10 await Task.Delay(interval); 11 } 12} 13Timer(1000, 実行するメソッド, タイマーを終了する条件式); 14
試したこと
Google検索を利用して調べた(検索に使ったワードは[C# 式に引数]など)
匿名関数や参照渡しでなんとかしようとしたのですが挫折しました。
補足情報(FW/ツールのバージョンなど)
.NET Framework4.7.1
C#7.3
質問者が中学生
なぜ「C# タイマー」で検索しないのですか?
仮引数の型として、単にboolで呼び出す時に式を引数にかくか、Func<bool,T>のようにしてifやwhileで演算するか、どちらかだと思うのですがやりたいことが分かりません。
コンパイルできなくていいので、どうしたいかコードに追記していただきたいです
「メソッドを指定した一定の間隔で呼び出す」のが目的なら Timer.Tick イベントのハンドラでそのメソッドを呼び出すのが簡単そうに思えますが? それが不適切な理由があれば教えて下さい。
Zuishinさん
したのですが思い通りのものがなかったのです
papinianusさん
引数にしてしまうとタイマーになりません(初期状態で値が決まってしまうので、何も起こらない or 止まらない)
追記はどのように書けばいいか……
SurferOnWwwさん
精度と使い勝手が悪いように思ったので
回答1件
あなたの回答
tips
プレビュー