我使用C#与Compact Framework的2,SP2。
该设备的操作系统被设置为我的申请启动,让我们称之为应用“Loader.exe是。”
装载机很简单:一个单一的,纯的形式,显示在整个负载状态信息,如果必要的话(通俗地说用于有作为一个错误和异常信息,或“起始应用[XYZ]”),和一个状态机在后台运行虽然示出了基本全屏的形式。
所以装载机的形式的构造函数在最后如下:
try
{
label1.Text = "Starting GUI Init Thread..."; //debug only message
System.Threading.Timer guiInit = new System.Threading.Timer(
RunStateMachine, null, 2000, System.Threading.Timeout.Infinite
);
//callback: RunStateMachine, null argument
//initial callback is 2000ms from this point, and doesn't run again.
}
catch (Exception ex1)
{
label1.Text = "GUI Init Error 2";
Failure_Label.Text = ex1.Message;
}
而“RunStateMachine”不工作在不同的线程比UI,使形式显示,并且任何时候RunStateMachine需要与形式交互,比如更新的消息,我调用使用IF(this.InvokeRequired)函数{这.Invoke(...);}其他{...}
所以,我的问题吗?
间歇性,我的程序将被挂起,这是因为计时器没有触发回调。 我在调试消息加try块以上,与许多其他地方一起告诉我在那里挂了,包括在最开始的消息“RunStateMachine。” 最后,我的程序挂在消息“启动GUI初始化主题...”
这告诉我,线程计时器没有运行有一次我需要它。
我的理论是,它被垃圾之前计时器触发回调收集。 这将意味着,如果计时器是全球性的,然后设置明确当我到RunStateMachine,它将完美运行...但我不想觉得我解决了这个问题,只是为了找到这来了间歇一个月从现在开始。
思考?