Sleep 休眠(挂起)和恢复windows窗体将在工作线程而不是主线程上启动程序

Sleep 休眠(挂起)和恢复windows窗体将在工作线程而不是主线程上启动程序,sleep,resume,suspend,worker-thread,systemevent,Sleep,Resume,Suspend,Worker Thread,Systemevent,我正在处理的windows窗体订阅了Microsoft.Win32.SystemEvents.PowerModeChanged,并在挂起时在窗体上运行Close方法。恢复时,它会像初始加载时一样运行Run函数。问题是,当计算机从睡眠模式唤醒时,PowerModeChanged事件会在名为.Net SystemEvents的工作线程上触发,而在调用Run时,它会在此工作线程而不是主线程上重新创建窗体 这个表单是我从另一个开发人员那里继承的项目,我对windows表单编程是新手。我想知道是否有更好的

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


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

在静态字段中捕获UI线程同步上下文,并在其上发布以返回UI线程。

在静态字段中捕获UI线程同步上下文,并在其上发布以返回UI线程。

首先为什么这样做?老实说,我不确定。我想最初的开发人员想要高效地处理睡眠?正如我所说的,我以前没有使用过windows窗体,所以我不确定挂起/恢复窗体的最佳做法是什么。我问过该窗体的原始开发人员,他说这是因为窗体使用的SDK会导致程序崩溃。这是因为此表单是一个VOIP客户端,SDK连接到VOIP服务器。当计算机挂起并恢复时,SDK与VOIP服务器失去连接并崩溃。不要关闭表单;停止VOIP的东西。为什么它会这样做呢?老实说,我不确定。我想最初的开发人员想要高效地处理睡眠?正如我所说的,我以前没有使用过windows窗体,所以我不确定挂起/恢复窗体的最佳做法是什么。我问过该窗体的原始开发人员,他说这是因为窗体使用的SDK会导致程序崩溃。这是因为此表单是一个VOIP客户端,SDK连接到VOIP服务器。当计算机挂起并恢复时,SDK与VOIP服务器失去连接并崩溃。不要关闭表单;停止VOIP内容。@madeFromCode不客气。啊,谢谢你。我试着投票赞成这个答案,但还没有得到答复。我一拿到就可以了。@madeFromCode不客气。啊,谢谢你。我试着投票赞成这个答案,但还没有得到答复。只要我赢了就可以了。