日期:2014-05-17  浏览次数:20751 次

C#双线程处理问题,跪求~!
2个方法,一个将处理好的String存到StringBuilder里,一个将StringBuilder里的内容存到Txt里,用双线程应该怎么处理?跪求一段代码。

------解决方案--------------------
P操作:使S=S-1,若S>=0,则该进程继续执行,否则该进程排入等待队列。
V操作:使S=S+1,若S>0,唤醒等待队列中的一个进程。

设s1=n(n=StringBuilder的最大容量)
P(s1)..存放一个数据。
V(s1)..写一个数据,将StringBuilder里的内容存到Txt里。


------解决方案--------------------
用StringBuilder如果不加锁你没办法保证操作时的线程安全,而如果加锁的话和你希望同步处理的初衷又违背了,所以不要用stringbuilder,
附上使用Queue的方法

public class StringQueueTest
{
private int cnt=0;
private Queue<string> strings=new Queue<string>();

public StringQueueTest()
{
Thread thread1=new Thread(new ThreadStart(Start1));
Thread thread2=new Thread(new ThreadStart(Start2));
thread1.Start();
thread2.Start();
}


private void Start1()
{
while (true) 
{
string s=(cnt++).ToString();
Console.WriteLine(s);
strings.Enqueue(s);
Thread.Sleep(1000);
}
}

private void Start2()
{
while (true) 
{
while (strings.Count>0) 
{
Console.WriteLine(strings.Dequeue());
}
Thread.Sleep(100);
}
}
}

------解决方案--------------------
只要一个  
backgroundworker
 就可搞定!
------解决方案--------------------

private static StringBuilder strs = new StringBuilder();
        private static BackgroundWorker backgroundWorker;

        static void Main(string[] args)
        {
            backgroundWorker = new BackgroundWorker();
            backgroundWorker.DoWork += TransString;
            backgroundWorker.RunWorkerCompleted += DisplayString;

            //处理string
            for (int i = 0; i < 10; i++)
            {
                string str = Console.ReadLine();
&nbs