2016-06-22 19 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,或者是否可以保存对感兴趣的进程的引用,并在计时器命中时使用它?