gpt4 book ai didi

multithreading - 同一窗口上的多个 UI 线程

转载 作者:行者123 更新时间:2023-12-04 04:28:27 25 4
gpt4 key购买 nike

我不想要多个窗口,每个窗口都有自己的 UI 线程,也不想要在单个 UI 线程上引发的事件,而不是后台工作人员和通知,也没有 Invoke、BeginInvoke 的东西。

  • 我对允许多个线程以安全方式更新同一个窗口的平台感兴趣。像第一个线程创建三个按钮,第二个线程另外五个,他们都可以访问它们,更改它们的属性并删除它们,而不会产生任何不必要的后果。
  • 我想要在不调用的情况下安全地多线程访问 UI,一个平台,可以直接从任何线程访问 UI 对象,而不会引发诸如“该对象只能从创建它的线程访问”之类的错误。让我在必要时进行同步,而不是阻止我以直接方式交叉访问 UI。
  • 最佳答案

    我要被否决了,但是... Go Go Gadget Soapbox。

    在一般情况下,多线程 GUI 是不可能的。它已经一次又一次地尝试过,但从来没有得到很好的结果。所有主要的窗口框架都遵循单线程 ui 模型并非巧合。他们没有互相抄袭,只是问题的限制使他们得出了相同的答案。许多比你或我更聪明的人都试图解决这个问题。

    可以为特定项目实现多线程 ui。我只是说一般情况下是做不到的。这意味着你不太可能找到一个框架来做你想做的事。

    问题的要点是这样的。将 gui 组件设想为一个链(实际上它更像是一棵树,但链很容易描述)。按钮连接到框架,连接到框,连接到窗口。 gui 有两个事件源,即系统/操作系统和用户。系统/操作系统事件起源于链的底部(窗口系统),用户事件起源于链的顶部(按钮)。这两个事件都必须通过 gui 链。如果两个线程同时推送这些事件,它们必须受到互斥保护。但是,没有已知的算法可以在两个方向上同时遍历双链表。它很容易死锁。 GUI 专家尝试并试图找出解决死锁问题的方法,最终得出了我们今天使用的解决方案,称为模型/ View / Controller ,也就是一个线程运行 UI。

    关于multithreading - 同一窗口上的多个 UI 线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1652799/

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