c#程序在读/写期间冻结

时间:2011-05-18 00:51:29

标签: c# multithreading freeze

我有一个用C#编写的程序,它从磁盘中的文件中读取了大量内容,然后输出几行文本,而不是很多文本文件中的100个文本。

该程序冻结了大约一半,我是c#的新手并且通常从研究编程,似乎我需要使用控制表单的单独线程。两个问题,

  1. 我应该使用新线程进行读取,还是使用新线程进行写入,还是仅使用一个读取函数?

  2. 这样做的最佳方式是什么?

  3. 我希望这是有道理的,我非常感谢你的帮助!

2 个答案:

答案 0 :(得分:2)

BackgroundWorker是最好用的。这是一个很好的tutorial,描述了它的所有事件和属性。

简而言之,这就是你应该做的。

  1. 根据需要创建后台工作程序实例并设置适当的properties
  2. 将所有I / O处理代码添加到DoWork,这将在一个单独的线程中执行。
  3. 将处理I / O操作后要执行的所有逻辑添加到将在主线程中执行的RunWorkerCompleted。在这里,您可以更新UI或在主线程中执行您想要执行的操作。 (您可以通过RunWorkerCompletedEventArgs.Result属性访问结果)
  4. 要记住的最重要的事情是ProgressChangedRunWorkerCompleted事件正在主线程中执行,您可以使用后台工作程序结果更新UI。只有后台线程中执行的DoWork事件。

答案 1 :(得分:0)

如果必须在写入之前进行完整读取,则只需要一个线程 - 否则,您可以使用两个。

检查一下线程示例: http://msdn.microsoft.com/en-us/library/aa645740(v=vs.71).aspx