当前位置: 代码迷 >> C# >> 多线程里怎么写入同1个文档数据
  详细解决方案

多线程里怎么写入同1个文档数据

热度:44   发布时间:2016-05-05 02:36:13.0
多线程里如何写入同1个文档数据
多线程里如何写入同1个文档数据?

public delegate void MyInvoke(string str);
        private void btnStartThread_Click(object sender, EventArgs e)
        {
            Thread thread = new Thread(new ThreadStart(DoWord));
            thread.Start();
        }
        public void DoWord()
        {           
            MyInvoke mi = new MyInvoke(SetTxt);
            BeginInvoke(mi,new object[]{"abc"});               
        }

        public void SetTxt(string str)
        {
            //把str写入1.txt  文档里
        }

这样可以么???? 这个不会导致什么错误吧,如果我要更新Listview呢??
------解决思路----------------------
引用:
Quote: 引用:

当然会有问题。通常文件都是共享读的,也就是多个线程可以同时读取文件。如果有一个线程在写,那么其它线程既不能读也不能写。如果要测试,你可以开一个线程打开文件写,然后Sleep(10000),同时让另一个线程去读或者写,就会出现你想看到的异常了。


哪如果这样
       private void btnStartThread_Click(object sender, EventArgs e)
        {
            Thread thread = new Thread(new ThreadStart(DoWord));
            thread.Start();
        }
        public void DoWord()
        {           
            this.BeginInvoke(new Action(() => {  写入数据到1.txt  })); 
        }

这样吧写入action事件委托给主线程去完成,可以么?否则要怎么写?

主线程只有一个,用于界面交互,如果你让主线程去做这个任务,那么界面就会卡住,通常我们会设计多线程去避免主线程卡住,而 不会反而把任务交给主线程去处理。
如果你要防止并发写文件,也就是需要排队,只有这个线程写完,其它线程才可以写。这就是线程同步,c#里有很多种方法实现线程同步,这个你自己学习学习。
  相关解决方案