2016-06-22 22 views
-1

我有一個關於PostMessage的問題。我試圖讓這對彼此C#PostMessage在一個計時器內

private void roll_spin_timer_Tick(object sender, EventArgs e) 
    { 
     foreach (Process P in processList) 
     { 
      if (P.ProcessName.Equals(processName)) 
      { 
       IntPtr edit = P.MainWindowHandle; 
       PostMessage(edit, WM_KEYDOWN, (IntPtr)Keys.R, (IntPtr)0); 
      } 
     } 
    } 

    private void kill_me_Tick(object sender, EventArgs e) 
    { 
     foreach (Process P in processList) 
     { 
      if (P.ProcessName.Equals(processName)) 
      { 
       IntPtr edit = P.MainWindowHandle; 
       PostMessage(edit, WM_KEYDOWN, (IntPtr)Keys.Enter, IntPtr.Zero); 
      } 
     } 

    } 


    #region Checkboxes 
    private void checkBox1_CheckedChanged(object sender, EventArgs e) 
    { 
     if (checkBox1.Checked) 
     { 
      checkBox2.Enabled = false; 
      textBox2.Enabled = false; 
      roll_spin_timer.Interval = Convert.ToInt32(textBox2.Text); 
      roll_spin_timer.Start(); 
     } 
     if (!checkBox1.Checked) 
     { 
      checkBox2.Enabled = true; 
      textBox2.Enabled = true; 
      roll_spin_timer.Stop(); 
     } 

    } 

      #region Checkboxes 
    private void checkBox1_CheckedChanged(object sender, EventArgs e) 
    { 
     if (checkBox1.Checked) 
     { 
      checkBox2.Enabled = false; 
      textBox2.Enabled = false; 
      roll_spin_timer.Interval = Convert.ToInt32(textBox2.Text); 
      roll_spin_timer.Start(); 
     } 
     if (!checkBox1.Checked) 
     { 
      checkBox2.Enabled = true; 
      textBox2.Enabled = true; 

      roll_spin_timer.Stop(); 
     } 

    } 

    private void checkBox2_CheckedChanged(object sender, EventArgs e) 
    { 
     if (checkBox2.Checked) 
     { 
      roll_spin_timer.Interval = Convert.ToInt32(textBox2.Text); 
      roll_spin_timer.Start(); 
      checkBox1.Enabled = false; 
      textBox2.Enabled = false; 
      kill_me.Start(); 
     } 
     if (!checkBox2.Checked) 
     { 
      roll_spin_timer.Stop(); 
      checkBox1.Enabled = true; 
      textBox2.Enabled = true; 
      kill_me.Stop(); 
     } 
    } 
    #endregion 

應該按Enter每15秒工作,當「kill_me」計時器滴答作響。當'roll_spin_timer'正在滴答時,它應該每隔30秒按R鍵。 另外它的工作原理,但當我試圖同時啓用兩個事情搞砸了。它每時每刻都在運行,就是這樣。我猜測有一個簡單的方法可以使它工作,但我只是不知道它是一樣的!

我該如何解決這個問題?說實話,我希望我能修復它我的自我。我只需要某種例子。我希望你們能幫助我。編碼對於長時間使用C#的人來說可能很糟糕,我可以使用一些技巧&技巧!

在此先感謝!

此致

MB

+0

我已經添加了激活它們的代碼;)我希望你能幫助我 –

+0

這是絕對正確的代碼嗎? - 您似乎有兩個相同方法的副本,並且kill_me_timer上的時間間隔從不設置。什麼是checkbox1和checkbox2意味着要控制? –

+0

Checkbox1應該控制Spin_roll_timer並且checkbox2應該啓用 –

回答

0

它看起來像你使用System.Windows.Forms.Timer。 Here你可以閱讀以下內容:

該Windows計時器被設計用於 UI線程用於執行處理單線程環境。

嘗試使用另一個計時器類System.Timers.Timer或System.Threading.Timer。 你也可以嘗試寫它使用線程

+0

我真的很想知道如何正確使用線程,那麼背景工作者呢? –

0

什麼是真的搞砸了嗎?你可以解釋嗎?或者你可以嘗試使用15秒間隔的單個定時器,並實現一些有點邏輯來處理15和30秒的間隔操作。你是否需要每次迭代processList,或者是否可以保存對感興趣的進程的引用,並在計時器命中時使用它?