gpt4 book ai didi

c# - 线程、事件和 GUI

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

我对如何在多线程应用程序中使用 GUI 感到有点困惑。

我听说有一个东西叫做 UI 线程。我假设这是我在应用程序启动时的主要执行线程。

我还听说(尽管我不是 100% 对此)在其他(非 UI)线程上做 UI 的东西是一个非常糟糕的主意。

所以,如果我创建一个单独的线程并且我想调用 MyForm myForm = new MyForm(); myForm.ShowDialog();在其中,我需要进行哪些更改才能使其“安全”?

另外,有些人告诉我,事件是在不同的线程上展开的。 (虽然我不确定我是否相信这一点。)如果他们是,那么我很困惑。我可以打开一个对话框(即 myForm.ShowDialog() 在事件中并没有发生真正可怕的事情。(也许这取决于事件委托(delegate)是用 Invoke 还是 BeginInvoke 调用的?)

最佳答案

这里有一些信息可能会对您有所帮助。你所说的在非 UI 线程上使用 UI 不仅仅是一个坏主意,你会得到一个异常(exception)。意思是,如果您在主线程中创建一个表单,然后生成一个后台线程进行一些处理,然后想要在该后台线程中更新表单,它将引发异常。但是,在您的示例中,您在后台线程中创建表单,您应该没问题。我会质疑你的设计,但它不会爆炸 只要您只在同一线程中触摸 UI .

至于事件,事件处理程序在引发它们的同一线程上执行。意思是,如果您在一个线程上有一个表单,该表单在另一个引发事件的线程上产生了一些工作,但在此之前,您在表单线程上 Hook 此事件,您需要注意不要直接在事件处理程序,因为这些事件处理程序正在后台线程上调用。

最后,从后台线程正确操作 UI 的方法是调用 Invoke 并传入执行所需 UI 工作的委托(delegate)。高温高压

关于c# - 线程、事件和 GUI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4338088/

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