2011-01-07 110 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,因为这会异步推动它。