相关疑难解决方法(0)

使用.NET进行多线程文件处理

有一个包含1000个小文本文件的文件夹.我的目标是解析和处理所有这些文件,同时将更多文件填充到文件夹中.我的目的是多线程这个操作,因为单线程原型花了六分钟来处理1000个文件.

我喜欢读写器线程如下.当读者线程正在读取文件时,我想让编写器线程来处理它们.一旦阅读器开始阅读文件,我想将其标记为正在处理,例如通过重命名.读完后,将其重命名为已完成.

我如何处理这样的多线程应用程序?

使用分布式哈希表或队列更好吗?

我使用哪种数据结构可以避免锁定?

这个方案有更好的方法吗?

.net c# architecture multithreading

16
推荐指数
2
解决办法
2万
查看次数

在C#中实现生产者/消费者模式

如何使用事件和代理在C#中实现Producer/Consumer模式?在使用这些设计模式时,我需要注意什么?我需要注意哪些边缘情况?

.net c# events design-patterns producer-consumer

13
推荐指数
1
解决办法
2万
查看次数

跨线程操作无效:控制'rchsdtOut'从其创建的线程以外的线程访问

所以我得到这个跨线程错误,我无法搞清楚.在我尝试使用它之前,这是我的基本代码.

基本上代码是调用批处理文件然后调用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)

c#

2
推荐指数
2
解决办法
2222
查看次数