2013-03-19 19 views
0

Я создаю текстовый файл «debug/log», чтобы попытаться увидеть, какие «потоки фона» работают, когда приложение, над которым я работаю, зависает.Почему мой файл не записывается?

Во-первых, как они активируются, я храню их в StringBuilder:

public static StringBuilder ActiveBackgroundThreads = new StringBuilder(); 

Есть довольно много (около 50), «Фоновые Нити» (так что оригинальный разработчик назвал их, хотя Я не уверен, что они действительно такие), которые получают включать и выключать, и я добавил дополнение к StringBuilder там, например, так:

private void InitializeBackgroundThread_PDALoginTerminate(bool add) 
{ 
    try 
    { 
     if (add) 
     { 
      pc.PDALoginTerminate += new PendingCommands.PDALoginTerminateEventHandler(DeinitLoginDialogs); 
      SSCS.ActiveBackgroundThreads.Append("DeinitLoginDialogs\r\n"); 
     } 
     else 
     { 
      pc.PDALoginTerminate -= new PendingCommands.PDALoginTerminateEventHandler(DeinitLoginDialogs); 
      SSCS.ActiveBackgroundThreads.Replace("DeinitLoginDialogs\r\n", ""); 
     } 
    . . . 

... и я наконец-то (когда я получаю последнее место в коде перед зависанием) напишите содержимое StringBuilder в текстовый файл или попробуйте:

StreamWriter file = new StreamWriter(@"\hereIAm.txt"); 
file.WriteLine(SSCS.ActiveBackgroundThreads.ToString()); 

... Тем не менее, когда я открываю этот файл (он создается), в нем ничего нет (0 байт). Я знаю, что некоторые из этих методов InitializeBackgroundThread_ * вызываются; это возможно, что каждый начал также получает остановлен до файла записывается, но я очень сомневаюсь, что ...

+0

Вам необходимо «Закрыть()' 'StreamWriter', чтобы оно было вровень с файлом. Оберните его в выражение 'using'. –

+0

Где вы закрываете или промываете файл? –

ответ

3

Либо Close() поток писателя или (лучше) поставить его в using заявление.

using(StreamWriter file = new StreamWriter(@"\hereIAm.txt")) 
{ 
    file.WriteLine(SSCS.ActiveBackgroundThreads.ToString()); 
} 
Смежные вопросы