1

Coding4Funプロジェクトに機能を追加しました。X時間後に背景を自動的に変更できるようにする追加オプションをプロジェクトに設定しました。X は ComboBox から設定されます。ただし、System.Timers.Timer を親として新しいタイマー クラスを作成したため、ElapsedEventHandler の静的メソッドが呼び出されると、元に戻ることができます。フォームを開き、ChangeDesktopBackground() を呼び出します。

ユーザー定義の間隔で ChangeDesktopBackground() を呼び出すより良い方法は何ですか?

これが私の現在の解決策です。これには、送信者を継承されたタイマーとしてキャストし、フォームへの参照を取得して、ChangeDesktopBackground メソッドを呼び出します。

private static void timerEvent(object sender, System.Timers.ElapsedEventArgs e)
{
    ((newTimer)sender).getCycleSettingsForm().ChangeDesktopBackground();
}

編集:現在のソリューションを示すためにコーディングサンプルを追加

4

3 に答える 3

0

タイマーを正しく使用しているかどうかはわかりませんが、タイマーはおそらく最も簡単な方法です。プロジェクトでタイマーを使用した方法は次のとおりです。

// here we declare the timer that this class will use.
private Timer timer;

//I've shown the timer creation inside the constructor of a main form,
//but it may be done elsewhere depending on your needs
public Main()
{

   // other init stuff omitted

   timer = new Timer();     
   timer.Interval = 10000;  // 10 seconds between images
   timer.Tick += timer_Tick;   // attach the event handler (defined below)
}


void timer_Tick(object sender, EventArgs e)
{
   // this is where you'd show your next image    
}

次に、timer.Intervalを変更するように、ComboBoxonChangeハンドラーを接続します。

于 2009-02-06T06:29:13.643 に答える
0

私は自分自身の前にこのようなことを書きました。System.Timers.Timer は、これにはやり過ぎです。いくつかの理由から、おそらく System.Windows.Forms.Timer を使用する必要があります。

  1. あまり正確である必要のないことをしています。Windows タイマーは、Windows アプリのメッセージ ポンプに送信される WM_TIMER メッセージにすぎないため、非常に高い精度は得られませんが、壁紙を 1 秒ごとに変更するのは現実的ではありません。(私は6時間ごとに変更するように書いています)
  2. ある種のタイマー ベースのタスクを実行する Windows フォーム アプリを使用する場合、System.Timers.Timer を使用すると、あらゆる種類のスレッド アフィニティの問題が発生します。すべての Windows コントロールには、それが作成されたスレッドに対するアフィニティがあります。つまり、そのスレッド上のコントロールのみを変更できます。Windows.Forms.Timer がすべての作業を行います。(将来のニッチピッカーにとって、壁紙の変更は実際にはカウントされません。これはレジストリ値の変更であるためです。ただし、ルールは一般的に保持されます)
于 2009-02-12T03:10:17.523 に答える