首页 > 解决方案 > 关于使用 c# 在 Winforms 中与 UI 线程同步的基本问题

问题描述

我知道 Winforms 只有一个 UI 线程,如果您需要在另一个线程上更新它,您应该使用调用方法。

我的问题是,如果您正在做的事情不会改变任何控件的外观,那仍然会访问 UI 线程吗?

例如,我的 form1 有一个记录器,它将消息写入用户根本看不到的本​​地文件。如果我在另一个线程中使用记录器,比如写一条新消息,这是否会被视为访问 UI 线程?是的,记录器在 form1.cs 中初始化,但它在表单上根本没有可视化表示。我还需要使用调用吗?

另外,如果我有一个扩展文本框的自定义控件。自定义控件有一个名为 initialized 的属性。更改此属性对控件的外观没有任何影响。那么,如果我从另一个线程更新这个属性,我需要使用调用方法吗?

标签: c#multithreadingwinformsui-threadthread-synchronization

解决方案


如果只有一个线程使用 logger 实例,则不需要同步,否则如果多个线程可以写入,则需要同步,而不是与 UI 线程同步,而是在线程之间同步,例如使用锁或监视器。

最后一个问题也是一样。


推荐阅读