【发布时间】:2011-01-29 01:58:44
【问题描述】:
完成此任务的最佳方法是:主线程(线程 A)创建另外两个线程(线程 B 和线程 C)。线程 B 和 C 执行繁重的磁盘 I/O,最终需要将他们创建的资源传递给线程 A,然后调用外部 DLL 文件中的方法,该方法需要正确调用创建它的线程,因此只有线程 A 可以调用它.
我唯一一次使用线程是在 Windows 窗体应用程序中,而调用方法正是我所需要的。该程序不使用 Windows 窗体,因此没有可使用的 Control.Invoke 方法。
我在测试中注意到,如果在线程 A 中创建了一个变量,我可以毫无问题地从线程 B/C 访问和修改它,这对我来说似乎是非常错误的。使用 Winforms,我确信它会在尝试访问在其他线程上创建的内容时引发错误。我知道从多个线程更改内容是不安全的,但我真的希望 .NET 完全禁止它以确保安全编码。 .NET 能做到这一点,而我只是错过了这艘船,还是只在 WinForm 应用程序中做到这一点?
既然它看起来确实允许这样做,我是否会像操作系统那样做一些事情,创建一个标志并从线程 A 监视它以查看它是否发生变化。如果是,则调用该方法。事件处理程序本质上不是这样做的,所以可以在主线程上以某种方式调用事件吗?
【问题讨论】:
标签: c# multithreading controls invoke