2011-01-07 8 views
2

Windows Mobile 6.5 장치와 통신해야하는 응용 프로그램을 작성하고 있습니다. 장치가 플러그인되면 activeHandler 콜백이 반환됩니다. 나는 데 문제는 그 코드의 실행이양식 실행시 코드 실행

lblStatus.Text = "someString"; 

라인에서 정지합니다. 예외가 발생하지 않고 코드 실행이 중지되고 gui가 포커스를받습니다. 같은 결과를 얻은 label 속성에서 invoke 메서드를 사용하여 동일한 작업을 시도했습니다. 해당 메서드에서 비 양식 코드를 호출하면 모든 것이 정상적으로 실행됩니다.

public partial class MyClass: Form 
{ 
    public MyClass() 
    { 
      ActiveHandler active = new ActiveHandler(ActiveSync_Active); 
      sync.addHandler(active) 
    } 

    private void ActiveSync_Active() { 
     lblStatus.Text = "someString"; 
     //Some code 
    } 
} 

편집 : 그 비동기 밀어 것이기 때문에, 너무 BeginInvoke를 시도

private delegate void StatusLabelChange(string str); 
private void ChangeStatusLabelText(string str) 
{ 
    lblStatus.Text = str; 
} 

private void ActiveSync_Active() { 
    lblStatus.Invoke(new StatusLabelChange(ChangeStatusLabelText), new object[] {"asd"}); 
} 
+0

스레드와 관련이 있어야합니다. 즉, 콜백을 만드는 스레드는 기본 GUI 스레드가 아닙니다. 이상하게도 Invoke가 작동하지 않는다 ... 어떤 종류의 thread-safe 큐를 설정하여 콜백에서 GUI 스레드로 다시 데이터를 전달하는 방법은? –

+0

"동기화"변수가 어떤 유형인지 알 수 있습니까? 어떤 수업/도서관을 사용합니까? – HABJAN

+0

동기화는 OpenNETCF 데스크탑 통신 라이브러리 (http://rapi.codeplex.com/)를 사용하여 장치와 통신하는 자체 클래스입니다. –

답변

0

작동하지 않았던 호출 호출.