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"});
}
스레드와 관련이 있어야합니다. 즉, 콜백을 만드는 스레드는 기본 GUI 스레드가 아닙니다. 이상하게도 Invoke가 작동하지 않는다 ... 어떤 종류의 thread-safe 큐를 설정하여 콜백에서 GUI 스레드로 다시 데이터를 전달하는 방법은? –
"동기화"변수가 어떤 유형인지 알 수 있습니까? 어떤 수업/도서관을 사용합니까? – HABJAN
동기화는 OpenNETCF 데스크탑 통신 라이브러리 (http://rapi.codeplex.com/)를 사용하여 장치와 통신하는 자체 클래스입니다. –