所有 WinForms 应用程序 windows 是否共享同一个线程?
Do all the WinForms application windows share the same thread?
我的一个 WinForms 应用程序不会在启动时立即执行 Application.Run(Form)
。
它首先初始化一些变量,访问命令行参数、应用程序配置 API、其他外部内容,特别是表单(例如登录表单)实例化(并通过传递一些配置之前设置的值)用 using
并用 ShowDialog
.
显示
然后执行Application.Run(Form)
来显示主窗体,但主窗体也可以依次显示其他窗体(主要是ShowDialog
)。所有表单都在单独的 class 库中定义。其中许多(windows)需要访问在 Program.Main(string[] args)
中实例化的对象(是的,我已经添加了 string[] args
部分,尽管使用 Visual Studio 创建的 WinForms 应用程序没有默认情况下)并将对象传递给彼此;
这让我担心线程安全,但我对 "UI thread" 概念的基本想法表明我的担心可能是错误的。
因此,由同一 WinForms 应用程序进程实例化和显示的所有 windows(Form
实例)是否共享相同的 UI 线程(除非我将代码 instantiating/showing 他们在一个异步 运行 Task
或类似的当然明确地)?或者我真的应该使用一些特殊的技术(具体建议表示赞赏)来安全地在它们之间传递数据?
回答您的问题有点困难,因为总有可能“...但我在这里和那里创建了一些线程...”潜伏着您没有告诉我们。
但是,除此之外,是的。 Winforms 应用程序将为其用户界面和所有周围代码使用 1 个线程。
请注意,如果您开始处理以下问题:
- Task.Run
- 线程class
- 后台工作者
然后我的回答就出来了window。
我的一个 WinForms 应用程序不会在启动时立即执行 Application.Run(Form)
。
它首先初始化一些变量,访问命令行参数、应用程序配置 API、其他外部内容,特别是表单(例如登录表单)实例化(并通过传递一些配置之前设置的值)用 using
并用 ShowDialog
.
然后执行Application.Run(Form)
来显示主窗体,但主窗体也可以依次显示其他窗体(主要是ShowDialog
)。所有表单都在单独的 class 库中定义。其中许多(windows)需要访问在 Program.Main(string[] args)
中实例化的对象(是的,我已经添加了 string[] args
部分,尽管使用 Visual Studio 创建的 WinForms 应用程序没有默认情况下)并将对象传递给彼此;
这让我担心线程安全,但我对 "UI thread" 概念的基本想法表明我的担心可能是错误的。
因此,由同一 WinForms 应用程序进程实例化和显示的所有 windows(Form
实例)是否共享相同的 UI 线程(除非我将代码 instantiating/showing 他们在一个异步 运行 Task
或类似的当然明确地)?或者我真的应该使用一些特殊的技术(具体建议表示赞赏)来安全地在它们之间传递数据?
回答您的问题有点困难,因为总有可能“...但我在这里和那里创建了一些线程...”潜伏着您没有告诉我们。
但是,除此之外,是的。 Winforms 应用程序将为其用户界面和所有周围代码使用 1 个线程。
请注意,如果您开始处理以下问题:
- Task.Run
- 线程class
- 后台工作者
然后我的回答就出来了window。