问一个简单C#线程问题

xisimao 2009-03-30 10:40:17
public class Document//创建一个表示文件夹的类,属性包括题目和内容
{
private string title;

public string Title
{
get { return title; }
set { title = value; }
}

private string content;

public string Content
{
get { return content; }
set { content = value; }
}
public Document(string newtitle, string newcontent)
{
title = newtitle;
content = newcontent;
}
}
public class DocumentManager //创建一个对文件夹的操作类,包括一个队列,一个添加方法,一个获得文件夹的方法,一个判断是否是空队列的方法
{
private readonly Queue<Document> documentQueue=new Queue<Document>();
public void AddDocument(Document doc)
{
lock (this)
{
documentQueue.Enqueue(doc);
}
}
public Document GetDocument()
{
Document doc = null;
lock (this)
{
doc=documentQueue.Dequeue();
}
return doc;
}
public bool IsDocumentAvailable
{
get
{
return documentQueue.Count > 1;
}
}
}
public class ProcessDocuments //增加一个关于文件夹操作的线程的类
{

public ProcessDocuments(DocumentManager dm)
{
documentManager = dm;
}
private DocumentManager documentManager;
public void Run() //这个方法正好复合ThreadStart这个委托,用来创建线程
{
while(true)
{
if (documentManager.IsDocumentAvailable)
{
Document doc = documentManager.GetDocument();
Console.WriteLine("处理文件:{0}", doc.Title);
}
else
{
Console.WriteLine("队列已经空了,无法处理!");
}
Thread.Sleep(1000);
}
}
}
主函数的代码:
DocumentManager dm = new DocumentManager();
ProcessDocuments p = new ProcessDocuments(dm);
new Thread(p.Run).Start(); //这个我明白,以p.Run这个方法创建一个线程,开始运行这个线程
for (int i = 0; i < 100; i++)
{
Document doc = new Document("Doc" + i.ToString(), "connect");
dm.AddDocument(doc);
Console.WriteLine("加入了文件:{0}", doc.Title);
Thread.Sleep(100);
}
输出:
处理文件XX
创建文件XX
创建文件XX
...
...
我的问题是:根据实际的输出我感觉for循环也是个进程,难道这是个系统默认的?这个我有点不懂,还有就是他们执行的顺序怎么和平时我们运行程序时的运行顺序(就是从主函数一行一行执行的那种)不太一样,按照原来那个应该是先执行完new Thread(p.Run).Start(); 才执行循环,但是现在他们是交叉着执行的,新人求教,我应该说的比较清楚吧。谢谢~
...全文
87 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
天乐 2009-03-31
  • 打赏
  • 举报
回复
1楼正解,楼主还不了解多线程编程的基本概念,需要补补

C#高级编程中线程一章讲的不错,推荐去看看
麻子Mozart 2009-03-31
  • 打赏
  • 举报
回复
学习
Alden 2009-03-30
  • 打赏
  • 举报
回复
你的程序本来就作为一个线程由操作系统进行管理,这是系统会产生一个线程运行你的p.run,而主线程继续进行往下运行,粗略的理解为两个独立的线程,由操作系统分配时间给这两个线程,其实楼主应该找一些C#中关于多线程的资料看看,你可能是对多线程的基本概念不了解。

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧