Sleep(suspend)和Resuming windows窗体在工作线程而不是主线程上启动程序

时间:2012-05-15 20:39:40

标签: sleep resume suspend worker-thread systemevent

我正在处理的Windows窗体订阅Microsoft.Win32.SystemEvents.PowerModeChanged,而Suspend它在表单上运行Close()方法。在Resume上,它会像初始加载时一样运行Run()函数。问题是,当计算机从睡眠模式唤醒时,PowerModeChanged事件在名为“.Net SystemEvents”的工作线程上触发,当调用Run()时,它会在此工作线程而不是主线程上重新创建表单。

这个表单是我从另一个开发人员继承的项目,我是Windows表单编程的新手。我想知道是否有更好的方法来处理睡眠/唤醒过程,而不是关闭窗体并在唤醒时重新创建它们或者强制创建到主线程上。注意:如果我删除代码并在计算机休眠(暂停)时不执行任何操作,并且在唤醒(恢复)时不执行任何操作,则程序将继续正常工作(在主线程上运行)。任何帮助将不胜感激。谢谢大家。

1 个答案:

答案 0 :(得分:4)

在静态字段中捕获UI线程SynchronizationContext,并在其上Post()返回UI线程。