窗体中的代码执行停止
问题描述:
我在写一个应该与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"});
}
答
尝试过的BeginInvoke,因为这会异步推动它。
它听起来像它必须是线程相关的,即回调线程不是主要的GUI线程。奇怪的是,虽然Invoke不起作用,但是如何设置某种线程安全的队列来将数据从回调传递回GUI线程? – 2011-01-07 09:28:52