关于在Winforms中使用c#与UI线程同步的基本问题。

问题描述 投票:0回答:1

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

我的问题是,如果你所做的事情并没有改变任何控件的外观,那是否仍然会访问UI线程?

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

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

c# multithreading winforms thread-synchronization
1个回答
0
投票

如果只有一个线程使用记录器实例,就不需要同步,否则如果几个线程都能写到它,你就需要同步,不是和UI线程同步,而是线程之间同步,比如使用锁或者监控。

最后一个问题也是一样的道理。

© www.soinside.com 2019 - 2024. All rights reserved.