2
我在寫一個應該與Windows Mobile 6.5設備通信的應用程序。當設備插入時,返回activeHandler回調。 那時遇到的問題是,代碼執行停止在窗體中的代碼執行停止
lblStatus.Text = "someString";
線。沒有拋出異常,代碼執行停止並且gui獲得焦點。我已經在標籤屬性上使用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
}
}
編輯: 的invoke調用沒有工作
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不起作用,但是如何設置某種線程安全的隊列來將數據從回調傳遞迴GUI線程? – 2011-01-07 09:28:52