我正在处理的Windows窗体订阅Microsoft.Win32.SystemEvents.PowerModeChanged
,而Suspend
它在表单上运行Close()
方法。在Resume
上,它会像初始加载时一样运行Run()
函数。问题是,当计算机从睡眠模式唤醒时,PowerModeChanged事件在名为“.Net SystemEvents”的工作线程上触发,当调用Run()
时,它会在此工作线程而不是主线程上重新创建表单。
这个表单是我从另一个开发人员继承的项目,我是Windows表单编程的新手。我想知道是否有更好的方法来处理睡眠/唤醒过程,而不是关闭窗体并在唤醒时重新创建它们或者强制创建到主线程上。注意:如果我删除代码并在计算机休眠(暂停)时不执行任何操作,并且在唤醒(恢复)时不执行任何操作,则程序将继续正常工作(在主线程上运行)。任何帮助将不胜感激。谢谢大家。
答案 0 :(得分:4)
在静态字段中捕获UI线程SynchronizationContext,并在其上Post()
返回UI线程。