【发布时间】:2011-03-10 03:47:57
【问题描述】:
在 Outlook 插件之一中,我有一个工作线程,它进行一些处理,然后更新一个布尔标志。主线程检查这个标志,如果它是 false ,它只是处理一个 while 循环而不做任何事情。
//工作线程 无效 DoSoneThing() { Outlook.Recipients recps = mail.Recipients。 foreach(recps 中的 Outlook.Recipient recp) { //将每个收件人保存在一个集合中 } 完成=真; } //主线程 而(!完成) { //读取已存储收件人姓名的集合。 }``如果主线程在工作线程将标志设置为 true 之前到达这段代码,则主线程继续处理循环,辅助线程只是暂停。并且由于 isDone 标志永远不会设置为 true,因此主线程不会做任何事情。
当我在 DoSomeThing 方法中加一个锁并在 mian 线程中使用相同的锁时,这个问题就解决了。
我的课 { 公共静态对象 _syncRoot = new Object(); 无效 DoSoneThing() { 锁(_syncRoot) { //过程 完成=真; } } } 我的其他类 { 锁定(myClass._syncRoot) { //过程 } }我的理解是锁用于限制多个线程对同一段代码的访问。但是不明白为什么主线程访问共享资源时工作线程不做任何事情。
【问题讨论】:
-
你跳过了所有重要的逻辑。请发布 Main 和 DoSomething 的实现。
标签: c# multithreading