2013-04-05 3 views
1

현재 MS Compact Framework 2.0이 설치된 Windows CE 5 장치에서 실행되는 C# 응용 프로그램을 작성하고 있습니다. 이 응용 프로그램에서 나는 비동기 BeginInvoke를 통해 키보드 훅에서 싱글 대화 상자를 호출 대화 상자의 표시 방법에 Form이 닫힌 후에 타이머가 시작됩니다.

this.BeginInvoke((ThreadStart)delegate() 
{ 
    DlgX.getInstance().display(TaskController.getInstance().getActiveTask().getValues(), true); 
}); 

내가 특정 컨트롤에 포커스를 설정합니다. Win CE 장치가 매우 느리기 때문에 타이머를 사용하여 Focus() 실행을 지연시켜야합니다.

System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer(); 
timer.Interval = 600; 
timer.Enabled = true; 
timer.Tick += (EventHandler)delegate(object obj, EventArgs args) 
{ 
    button1.Focus(); 
    timer.Dispose(); 
}; 

불행히도 이것은 작동하지 않습니다. 대화 상자를 닫으면 바로 타이머가 실행됩니다. 내가 뭘 잘못하고 있니?

도움을 주셔서 감사합니다.

편집 : 이 대화의 전체 표시() 방법 :

public void display(List<InputRow> fvList, bool validate) 
{ 
    this.fvList = fvList; 
    ctlCount = (fvList.Count > 5 ? 5 : fvList.Count); 
    for (int i = 0; i < ctlCount; i++) 
    { 
     //some 100% irrelevant stuff 
    } 
    button1.KeyDown += new KeyEventHandler(btnOK_KeyDown); 
    button1.Click += new EventHandler(btnOK_Click); 
    if (!this.Visible) 
    { 
     ShowDialog(); 
    } 
    if (validate) 
    { 
     System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer(); 
     timer.Interval = 600; 
     timer.Enabled = true; 
     timer.Tick += (EventHandler)delegate(object obj, EventArgs args) 
     { 
      button1.Focus(); 
      timer.Dispose(); 
     }; 
    } 
} 
+0

양식을 닫을 때 이벤트가 시작된다는 의미입니까? 이 코드가'Form.Closing'에 있다고 가정합니다. 600은 밀리 초 단위로 나타납니다. 이벤트가 빠르게 발생하는 것처럼 보입니다. 2s와 같은 값으로 올리려고 했습니까? –

+0

간격을 5000ms로 시도했는데 대화 상자를 닫은 후 5 초가 경과했습니다. Form의 display() 메소드에서 실행됩니다. 디스플레이 fnc의 전체 코드를 내 게시물로 편집합니다. – cutze

+0

디버거가 타이머 선언으로 이동합니까? 나는 그것이 ShowDialog에 걸려서 타이머가 시작되는 것을 막을 것이라고 생각한다. 대화 상자를 닫은 후에 타이머가 시작되므로 나에게 정상적인 것처럼 보입니다. o. 또는 귀하의 문제를 이해하지 못했습니다 .. –

답변

3

타이머 인스턴스화하고 양식을 닫을 때 ShowDialog동기 때문에, 평가 가능하게한다. 타이머를 앞에 두어야합니다. ShowDialog

+1

또는'Show()'를 사용하십시오. – MoonKnight

관련 문제