2011-01-07 109 views
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"}); 
} 
+0

它聽起來像它必須是線程相關的,即回調線程不是主要的GUI線程。奇怪的是,雖然Invoke不起作用,但是如何設置某種線程安全的隊列來將數據從回調傳遞迴GUI線程? – 2011-01-07 09:28:52

回答

0

嘗試過的BeginInvoke,因爲這會異步推動它。