新規作成日 2017-10-16
最終更新日
具体的には、どのように動作しているかは理解できませんが、ReadAsync メソッドを使うことで、非同期読み込みを使用することができます。 コードは、少し増えます。C#でWPFアプリケーションを作成する際は、 読み込み動作の間にUIが停止することが無くなるので、特に問題がなければ、非同期読み込みコードを使用したほうが良いかと思います。

改めて、StreamReaderAsyncTestという名前でコンソールアプリケーションを作成します。
今回も、msdnのStreamReader クラスの使用例を使います。
Program.csにコードを貼り付けます。
そして、ファイル名を読み込むファイルのものに変更しておきます。また、実行結果を確認できるように、コンソールを閉じないように、キー入力を求めるコードを追加します。
using System;
using System.IO;
using System.Threading.Tasks;
namespace StreamReaderAsyncTest
{
class Program
{
static void Main(string[] args)
{
ReadAndDisplayFilesAsync();
// Enterキーが押されるまで、コンソールを閉じないようにする
Console.Read();
}
private async static void ReadAndDisplayFilesAsync()
{
String filename = @"TextFile.txt";
Char[] buffer;
using (var sr = new StreamReader(filename))
{
buffer = new Char[(int)sr.BaseStream.Length];
await sr.ReadAsync(buffer, 0, (int)sr.BaseStream.Length);
}
Console.WriteLine(new String(buffer));
}
}
}

次に、ソリューションエクスプローラーで、新しい項目を追加します。

テキストファイルを追加します。
作成したテキストファイルに次の内容を記入し、保存します。
テキストエディタで作成する場合は、保存場所と文字エンコードに注意して下さい。
// 英語,複数形,性別,日本語,数詞
dog,dogs,male,犬,匹
bitch,bitchs,female,犬,匹
cat,cats,non,猫,匹
rabbit,rabbits,non,兎,羽

一度、実行ボタンを押してビルドし、作成したテキストファイルをプロジェクトフォルダー内のbin→Dibugフォルダにコピーします。

実行ボタンを押します。

テキストがコンソールに表示されます
動作することが確認できました。再利用しやすいように、読み込むファイルが存在するかの確認や例外処理のコードを追加します。
using System;
using System.IO;
using System.Threading.Tasks;
namespace StreamReaderAsyncTest
{
class Program
{
static void Main(string[] args)
{
ReadAndDisplayFilesAsync();
// Enterキーが押されるまで、コンソールを閉じないようにする
Console.Read();
}
private async static void ReadAndDisplayFilesAsync()
{
try
{
String filename = @"TextFile.txt";
Char[] buffer;
if (File.Exists(filename))
{
using (var sr = new StreamReader(filename))
{
buffer = new Char[(int)sr.BaseStream.Length];
await sr.ReadAsync(buffer, 0, (int)sr.BaseStream.Length);
}
Console.WriteLine(new String(buffer));
}
else
{
Console.WriteLine("ファイル「{0}」が存在しません。", filename);
}
}
catch (Exception e)
{
// Let the user know what went wrong.
// ユーザーに、何が問題になったのかを知らせます。
// The file could not be read:
Console.WriteLine("ファイルを読み取れませんでした:");
Console.WriteLine(e.Message);
}
}
}
}
