2016-06-22 3 views
-1

PostMessage에 대한 질문이 있습니다. 'kill_me'타이머가 똑딱 때 나는이 하나 그것은 15 초마다 Enter 키를 누릅니다해야 다른타이머 내의 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 

작업을 얻기 위해 노력하고있어. 그리고 'roll_spin_timer'가 똑딱 거리는 30 초마다 R 키를 눌러야합니다. 별도로 작동하지만 동시에 두 가지를 사용하려고 할 때 상황이 엉망이됩니다. 그것은 때때로 작동하며, 그게 전부입니다. 나는 그것을 쉽게 만들 수있는 방법이 있다고 생각하지만, 아직 모릅니다.

이 문제를 어떻게 해결할 수 있습니까? 솔직히 말해서 나는 그것을 내 자신으로 고칠 수 있었으면 좋겠다. 몇 가지 예가 필요합니다. 너희들이 나를 도울 수 있기를. 코딩은 C#을 오랜 기간 사용하는 사람들에게는 끔찍한 일이며, 몇 가지 팁을 사용할 수 있습니다. & 트릭!

미리 감사드립니다.

너의 감사

MB 당신이 System.Windows.Forms.Timer를 사용하는 것 같습니다

+0

내가 활성화 한 코드를 추가했습니다.) 나를 도울 수 있기를 바랍니다. –

+0

이 코드가 맞습니까? - 당신은 같은 방법의 두 복사본을 가지고있는 것 같고, kill_me_timer의 간격은 절대로 설정되지 않습니다. checkbox1과 checkbox2는 무엇을 제어하기위한 것입니까? –

+0

Checkbox1이 Spin_roll_timer를 제어해야하고 checkbox2가 활성화되어야합니다. –

답변

0

. Here 당신이 다음 읽을 수 :

이 윈도우 타이머가 UI 스레드가 처리를 수행하는 데 사용되는 단일 스레드 환경을 위해 설계되었습니다.

다른 타이머 클래스 System.Timers.Timer 또는 System.Threading.Timer를 사용해보십시오. 또한 스레드를 사용하여 글을 쓸 수 있습니다.

+0

정말 쓰레드를 올바르게 사용하는 방법을 알고 싶습니다. 배경 작업자는 어떻게됩니까? –

0

정말 엉망이 된 것은 무엇입니까? 설명 할 수 있니? 또는 15 초 간격으로 단일 타이머를 사용하고 15 ~ 30 초 간격 작업을 처리하는 일종의 논리를 구현할 수 있습니다. 매번 processList를 반복해야합니까, 아니면 관심있는 프로세스에 대한 참조를 유지하고 타이머가 안타 때마다 사용 할 수 있습니까?