2016-01-08 71 views
1

我運行一個方法,是三個部分組成,第一部分和3都是「讀文本文件」一樣,C#讀取寫入文本文件結束在中東

和第2部分是保存串到文本文件,

// The Save Path is the text file's Path, used to read and save 
// Encode can use Encoding.Default 
public static async void SaveTextFile(string StrToSave, string SavePath, Encoding ENCODE) 
{ 
    // Part1 
    try 
    { 
     using (StreamReader sr = new StreamReader(SavePath, ENCODE)) 
     { 
      string result = ""; 
      while (sr.EndOfStream != true) 
       result = result + sr.ReadLine() + "\n"; 

      MessageBox.Show(result); 
     } 
    } 
    catch (Exception e) 
    { 
     Console.WriteLine(e); 
    } 

    // Part2 
    try 
    { 
     using (FileStream fs = new FileStream(SavePath, FileMode.Create)) 
     { 
      using (StreamWriter sw = new StreamWriter(fs, ENCODE)) 
      { 
       await sw.WriteAsync(StrToSave); 
       await sw.FlushAsync(); 
       sw.Close(); 
      } 
      MessageBox.Show("Save"); 
      fs.Close(); 
     } 
    } 

    // The Run End Here And didn't Continue to Part 3 

    catch (Exception e) 
    { 
     Console.WriteLine(e); 
    } 

    // Part3 
    try 
    { 
     using (StreamReader sr = new StreamReader(SavePath, ENCODE)) 
     { 
      string result = ""; 
      while (sr.EndOfStream != true) 
       result = result + sr.ReadLine() + "\n"; 

      MessageBox.Show(result); 
     } 
    } 
    catch (Exception e) 
    { 
     Console.WriteLine(e); 
    } 
} 

但我覺得奇怪的是,在這個地方的過程中到底哪裏2部分完成,並且該過程結束,直接,但沒有繼續PART3,

是什麼原因這個條件?一般過程應該貫穿整個方法但不應該停在中間

(還有一個問題) 還有其他方法可以做part2的目的嗎,也可以繼續part3來完成整個方法嗎?

+0

有沒有異常? – pquest

+0

這段代碼是否在try/catch塊中?可能你在它的中間有一個例外。 – jpgrassi

+0

不,即使我將三個使用塊單獨放在三個try catch中,該過程仍然在part2並在調試下結束,我沒有看到它進入catch塊 –

回答

1

問題是你告訴你的應用程序到await的方法,但從來沒有得到任務結果或給它一個機會來完成。從到目前爲止,你已經證明什麼,你不需要異步的東西,無論如何,和大大簡化代碼:

public static void SaveTextFile(string StrToSave, string SavePath, Encoding ENCODE) 
{ 
    //Part1 
    try 
    { 
     MessageBox.Show(File.ReadAllText(SavePath, ENCODE)); 
    } 
    catch (Exception e) 
    { 
     Console.WriteLine(e); 
    } 

    //Part2 
    try 
    { 
     File.WriteAllText(SavePath, StrToSave, ENCODE); 
     MessageBox.Show("Save"); 
    } 
    catch (Exception e) 
    { 
     Console.WriteLine(e); 
    } 

    //Part3 
    try 
    { 
     MessageBox.Show(File.ReadAllText(SavePath, ENCODE)); 
    } 
    catch (Exception e) 
    { 
     Console.WriteLine(e); 
    } 
} 
+0

謝謝!對不起,我沒有花更多的時間搜索關於readwritetext的更多方法,但這似乎是一個更好的方法 –

2

這可能是因爲你正在編寫一個異步方法無效,你是調用一些異步方法部分2.儘量在第2部分改變異步方法,以非異步方法:

using (StreamWriter sw = new StreamWriter(fs, ENCODE)) 
{ 
    sw.Write(StrToSave); 
    sw.Flush(); // Non-async 
    sw.Close(); // Non-async 
} 

它像現在期望的那樣行事?

+0

我剛剛明白了,你是對的... –