2015-04-07 3 views
1
class Program 
{ 
    static void Main(string[] args) 
    { 
     const string PATH = @"C:\My_PATH\"; 
     const string FILE_NAME = "data_acquistion2"; 
     const string DATETIME_STOP_RECORD = "01-04-15 17:18"; 
     bool fichierNonExistant = false; 
     PerformanceCounter cpuCounter; 
     PerformanceCounter ramCounter;` 

     cpuCounter = new PerformanceCounter(); 
     cpuCounter.CategoryName = "Processor"; 
     cpuCounter.CounterName = "% Processor Time"; 
     cpuCounter.InstanceName = "_Total"; 

     ramCounter = new PerformanceCounter("Memory", "Available MBytes"); 

     string actualPeriod = ""; 
     if (!File.Exists(PATH + FILE_NAME + ".csv")) 
     { 
      FileStream myFs = File.Create(PATH + FILE_NAME + ".csv"); 
      fichierNonExistant = true; 
      myFs.Close(); 

     } 

     StreamWriter myWriter = new StreamWriter(PATH + FILE_NAME + ".csv", true); 
     if (fichierNonExistant == true) 
     { 
      myWriter.WriteLine("CPU Used (%)" + "," + "RAM Free (%)" + "," + "Hour and record Date"); 
     } 

     while (actualPeriod != DATETIME_STOP_RECORD) 
     { 
      actualPeriod = DateTime.Now.ToString("dd/MM/yy HH:mm:ss"); 
      // Console.WriteLine(periodeActuelle); 
      myWriter.WriteLine(cpuCounter.NextValue() + "," + ramCounter.NextValue() + "," + actualPeriod); 
      Thread.Sleep(20000); //If I add this the program doesn't write in the csv file 
     } 

    } 


}` 

Привет,Thread.Sleep() не работает в консольном приложении C#

У меня есть проблема с Thread.Sleep в C#, я разработаны код для сочинительства в% CPU (используется) и RAM непосредственно в файл csv.

Он работает без задержки, но я хочу писать эти значения каждые 20 секунд, поэтому мне нужно использовать Thread.Sleep (20000). Я также пробовал Task.Delay, и у меня такая же проблема.

+0

Что делает «не работает» и «Проблема прямо здесь» * означает *? что происходит*? И что вы ожидаете от вас? –

+2

несвязанный, но мне было бы очень маловероятно, чтобы он когда-либо * выходил из-за '! =' Сравнения строк; IMO, вы должны хранить 'actualPeriod' как' DateTime' и использовать '<' –

+0

'DATETIME_STOP_RECORD' не включает секунды, но' actualPeriod' делает. Так что это будет циклично навсегда. Кроме того, в зависимости от вашей текущей культуры также может быть расхождение между '-' и'/'. Лучше всего послушать Marc и просто сравнить 'DateTime'. – juharr

ответ

1

Проблема не в Thread.Sleep(). Вы используете StreamWriter, и, поскольку ваша программа, вероятно, никогда не закрывается, вам нужно очистить StreamWriter после записи.

Добавить

myWriter.Flush() перед Thread.Sleep()

+0

Отлично работает! Спасибо за вашу помощь Shar1er80 :) – Ironboy07

+0

Добро пожаловать. Проверьте цикл while, как уже отмечали другие, похоже, что он бесконечен и любезно проверяет мой ответ. :-) – Shar1er80

+0

Хорошо, посмотрю. Благодарю. – Ironboy07

0

Проблема заключается в том, если я добавить Thread.Sleep() программа ничего в файле CSV писать.

(я предполагаю, что есть недостающий «не» там)

Это звучит как проблема смыва; ваши изменения все еще буферизуются в писателе. Вы могли бы попробовать с использованием myWriter.Flush();, но обратите внимание, что у вас могут возникнуть проблемы с общим доступом к файлам и т. Д. Так как вы собираетесь делать паузу в течение 20 секунд (очень долгое время на компьютере), вы можете также сохранить файл если вы его не используете. Было бы более эффективно избавиться от писателя полностью и просто использовать File.AppendText(path, newLine), если необходимо, отметив, что вы включили свой выбор окончания строки в строке. Тогда файл будет закрыт почти все время.

Дополнительно: ваше условие выхода петли требует внимания; прямо сейчас он будет никогда выход по собственному выбору (с actualPeriod включает секунды, а DATETIME_STOP_RECORD - нет). Было бы лучше использовать также DateTime и < (вы могли бы перейти от времени до времени, не нажимая ровно столько времени).

+0

Отлично работает!Спасибо за объяснение. Хорошо, я тоже изменю свой цикл. Теперь я понимаю, как это работает – Ironboy07

Смежные вопросы