将状态消息从一个类发送到我的Main方法

时间:2014-04-24 20:43:07

标签: c#

我有一个带有冗长foreach循环的类,可能需要一分钟甚至更长时间才能运行,具体取决于我正在解析和插入,更新等的记录数量。

所以我有一个这样的课:

public class FileManeger
{

   public bool ParseFile()
   {
       // ....stuff
       foreach(DataRow row in Rows)
       {
            // stuff
       }
   }
}

然后在我的program.cs main method

FileManager manager = new FileManager();
Console.Writeline("Parsing started...");
manager.ParseFile();
Console.Writeline("Parsing Finished.");

所以我想也许在这两个消息之间我可以显示更多的反馈,例如在foreach循环中放置一个计数器,并且每50行传递一次 打印控制台消息,如"从6500行解析行1到50"," 从6500行解析行51到100",等......

所以我认为我需要写一些event,但我对事件没有经验,有人可以帮助这部分吗?

2 个答案:

答案 0 :(得分:1)

如果您只是想向控制台添加更多消息,那么您可以这样做:

   public bool ParseFile()
   {
       // ....stuff
       int i = 1;
       int count = Rows.Count();
       foreach(DataRow row in Rows)
       {
            Console.WriteLine("parsing row " + i + " from " + count + " rows");
            ++i;
            // stuff
       }
   }

当然,如果您只想为每50个元素添加此消息,请将Console.WriteLine部分更改为:

if (i%50 == 1) Console.WriteLine("parsing rows " + i + "-" + i+49 + " from " + count + " rows");

但我强烈建议您查看BackgroundWorkers和/或Threads

答案 1 :(得分:1)

这是让你入门的东西。你可以使用代表。

public class FileManeger
{
   public Action<string> Trace {get;set;}
   public bool ParseFile()
   {
       // ....stuff
       foreach(DataRow row in Rows)
       {
            // stuff
            this.Trace("Send a message like this");

       }
   }
}

然后在你的主要

FileManager manager = new FileManager();
Console.Writeline("Parsing started...");
manager.Trace = (msg)=>Console.WriteLine(msg);
new Thread(()=>{manager.ParseFile();}).Start();
//    Console.Writeline("Parsing Finished."); let the file parser emit this message