表单中的代码执行停止

Posted

技术标签:

【中文标题】表单中的代码执行停止【英文标题】:Code Execution in Form Stops 【发布时间】:2011-01-07 09:11:11 【问题描述】:

我正在编写一个应该与 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
    

编辑: 无效的调用调用

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 线程? 你能告诉我“同步”变量是什么类型吗?你使用什么类/库? sync 是我自己的类,使用 OpenNETCF 桌面通信库 (rapi.codeplex.com) 与设备进行通信 您可以发布对您不起作用的Invoke 电话吗? 会不会是抛出了异常,却被某个处理程序默默吞下了? 【参考方案1】:

也试试 BeginInvoke,因为那会异步推送它。

【讨论】:

以上是关于表单中的代码执行停止的主要内容,如果未能解决你的问题,请参考以下文章

在 GDB 中的第一条机器代码指令处停止

在关闭表单之前停止线程

php include_once 使我的代码停止运行

如何在 vuejs2 中执行“用户停止输入后提交表单”

使用onsubmit return false 阻止form表单提交的方法介绍

更改表单过滤器时访问崩溃