(开始)在非视野下调用

时间:2019-02-02 06:43:17

标签: c# multithreading

说Windows窗体应用程序具有SomeForm类:

public partial class SomeForm : Form
    {
        public int someint;
        ....
    }

和主线程分开的另外一个线程。如果我想从其他线程更改表单的标题,则必须使用(Begin)Invoke,但是如果我要访问“ someint”(与任何视觉外观均不相关),我仍然必须使用它吗?

如果我需要的话,会发生什么,如果“someint”是静态的领域 - 所以它不需要SomeForm的实例来访问?

1 个答案:

答案 0 :(得分:2)

您只需要Invoke,因为它需要的一切它创建线程上正在发生的有关UI的东西。您可以从其他线程访问简单字段或属性,而无需调用UI线程。

但是确实要指出,编译器和/或JIT可能会优化某些事情,并假定代码的其他部分未更改其值。如果需要确保正确读取和写入值,则可能需要使用同步方法。例如,互锁,互斥,易失性等。