gpt4 book ai didi

c# - Windows 窗体应用程序中不同线程中的 GUI 和逻辑分离

转载 作者:太空宇宙 更新时间:2023-11-03 18:49:29 24 4
gpt4 key购买 nike

在 Windows 窗体应用程序中,我想将 GUI 与逻辑分开。用户请求很复杂并且涉及通信,所以我不希望它依赖于 GUI 线程。结构应该是这样的:

        GUI -----> splash screen ---------> User Form --------------> ...              |                        #              | create Manager thread  | Show this Form              #                        |    Manager -----> Check user type -------> Wait for user command --> ...

对于这样的设计,您有哪些建议、指南或模式?这是正确的选择吗?谢谢!

编辑管理器线程应该控制 GUI 而不是相反。此外,Manager 线程应该在所有应用程序时间内都处于事件状态。

最佳答案

传统上这样的工作是使用 BackgroundWorker 完成的

基本上,它是一个简单的类,使您能够在工作线程上执行功能,然后在该功能完成后自动调用回 UI 线程。在函数运行期间,UI 被解锁并可以显示进度消息,或处理其他用户输入(例如取消)。

结果与您的模式类似,但会为每个任务创建和销毁一个单独的线程(好吧,确实存在池...)。

UI thread ---> Show splashscreen------------------->Show window-------                      |                           |return to UI      |                      | create background worker  |                  |                      -> Process user ------------                   ->Perform query etc.

好的,根据您的评论:

您可以使用这样的模式,这是一个简单的事件处理案例。授予管理器 UI 访问权限,以便它可以对其执行方法调用并在任务完成时注册事件(this link 显示了 .NET 中异步操作的两种主要模式)。在管理器内部,您需要维护一个任务列表,这些任务可以在单线程上按顺序执行,并确保调用以将结果返回到 UI 的事件被正确调用,以便在主 UI 线程上运行(基本上重新创建后台 worker 模式)。

我不确定您希望通过这样做获得什么,是否有理由将应用程序限制为两个线程?您是否担心创建后台 worker 的成本?您需要某种查询队列系统吗?您问题中图表中的示例似乎不需要这种模式的复杂性。

关于c# - Windows 窗体应用程序中不同线程中的 GUI 和逻辑分离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1333566/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com