有一个包含1000个小文本文件的文件夹.我的目标是解析和处理所有这些文件,同时将更多文件填充到文件夹中.我的目的是多线程这个操作,因为单线程原型花了六分钟来处理1000个文件.
我喜欢读写器线程如下.当读者线程正在读取文件时,我想让编写器线程来处理它们.一旦阅读器开始阅读文件,我想将其标记为正在处理,例如通过重命名.读完后,将其重命名为已完成.
我如何处理这样的多线程应用程序?
使用分布式哈希表或队列更好吗?
我使用哪种数据结构可以避免锁定?
这个方案有更好的方法吗?
如何使用事件和代理在C#中实现Producer/Consumer模式?在使用这些设计模式时,我需要注意什么?我需要注意哪些边缘情况?
所以我得到这个跨线程错误,我无法搞清楚.在我尝试使用它之前,这是我的基本代码.
基本上代码是调用批处理文件然后调用java文件.然后输出数据实时重定向到控制台.当我只是将输出重定向到C#控制台时,它工作正常.但是我希望将相同的信息打印到应用程序中的富文本框中.VS 2010抱怨rchsdtOut.Text = e.Data.ToString(); 跨线程操作无效:控制'rchsdtOut'从其创建的线程以外的线程访问.
我试过看了这个,我承认我是新手,所以任何有关如何轻松实现这一点的帮助将不胜感激.
//Declare and instantiate a new process component.
System.Diagnostics.Process process1;
process1 = new System.Diagnostics.Process();
process1.StartInfo.UseShellExecute = false;
process1.StartInfo.RedirectStandardOutput = true;
process1.StartInfo.CreateNoWindow = true;
process1.StartInfo.FileName = "cmd.exe";
process1.StartInfo.Arguments = "BATFile.bat";
process1.OutputDataReceived += (s, a) => myMethod(a);
process1.Start();
process1.BeginOutputReadLine();
process1.WaitForExit();
process1.Close();
private void myMethod(DataReceivedEventArgs e) {
if (e.Data != null)
{
rchsdtOut.Text = e.Data.ToString();
Console.WriteLine(e.Data.ToString());
}
}//end of private
Run Code Online (Sandbox Code Playgroud)