![]() |
1
4
我将在一个单独的后台线程中运行整个“不能拆分的复杂函数”,并让它仅在需要时(在控件上使用invoke/begininvoke方法)向GUI报告。 在更增强的版本中,您应该在一个不依赖于UI的非UI控制器中运行复杂的函数,并且更容易进行单元测试。调用回UI并在UI中显示结果,可以通过让UI子标记控制器提供的事件来轻松访问。 |
![]() |
2
3
为什么不生成另一个线程来执行等待,并让他在适当的接合点通过消息(或其他)通知UI线程? 这是通常允许在阻塞事件期间处理UI线程消息的方法。 编辑: 现在我明白了——您已经在UI代码中构建了应用程序逻辑逻辑。那么,这真的是一个设计问题。从长远来看,您最好将该功能从UI分解为一个独立的对象,并使用某种机制与工作人员的UI通信状态。 除了让您的UI代码集中在UI上的好处之外,这还允许您分别对逻辑代码进行单元测试。 |
![]() |
3
2
不确定C,但在普通的win32编程中,您可以使用msgwaitfor…()函数之一进行实际等待。当消息出现在消息队列中时,以及等待的对象发出信号时,它将通知您。如果报告存在消息,可以调用getMessage()、translateMessage()和dispatchMessage()来处理消息,然后返回等待状态。 |
![]() |
4
2
我通常会建议把你的等待条件放到另一个线程上。 不过,尽管如此,你可以随时打电话给 Application.DoEvents 在任何点处理消息泵,包括等待句柄上的“等待”期间(仅超时、执行事件、等待超时等,直到“通过”等待句柄)。 |
![]() |
A B · C#Excel自动调整列避免长文本时出错 3 月前 |
![]() |
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 4 月前 |
![]() |
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 4 月前 |
|
Sei · Avalonia/WPF将路由器传递到控制模板 4 月前 |