■
1、ファイルを別スレッドで読んで、TextBoxに表示するプログラム。匿名メソッドを使うと、きれいにまとまる。
private void button1_Click(object sender, EventArgs e)
{
FileStream fs = new FileStream(@"D:\dir1\test.txt", FileMode.Open );
Byte [] by = new Byte[ fs.Length ];
AsyncCallback ar = new AsyncCallback( delegate( IAsyncResult iar)
{
fs.EndRead(iar);
fs.Dispose();string str = System.Text.Encoding.UTF8.GetString( by );
textBox1.Invoke( new Action( delegate(){ textBox1.Text = str; } ));
});
fs.BeginRead( by, 0, (int)fs.Length, ar, null );
}
2、1と同じことをする。ファイルを普通にで読んで、TextBoxに表示するプログラム。これは簡単。
private void button1_Click(object sender, EventArgs e)
{
FileStream fs = new FileStream(@"D:\dir1\test.txt", FileMode.Open );
Byte [] by = new Byte[ fs.Length ];
fs.Read( by, 0, (int)fs.Length );
fs.Close();
string str = System.Text.Encoding.UTF8.GetString( by );
textBox1.Text = str;
}
3、ファイルを別スレッドで読んで、TextBoxに表示するプログラム。ちょっと前までは、こんな感じだった。
Byte [] _by;
delegate void StringDelegate( string s );private void button1_Click(object sender, EventArgs e)
{
FileStream fs = new FileStream(@"D:\dir1\test.txt", FileMode.Open );
_by = new Byte[ fs.Length ];
fs.BeginRead( _by, 0, (int)fs.Length, new AsyncCallback( ReadCallback ), fs );
}
void ReadCallback( IAsyncResult res )
{
FileStream fs = (FileStream)res.AsyncState;
fs.EndRead( res );
fs.Dispose();string str = System.Text.Encoding.UTF8.GetString( _by );
textBox1.Invoke( new StringDelegate( SetTextBox1 ), str );
}
void SetTextBox1( string str )
{
textBox1.Text = str;
}
4、3を修正、ファイルを別スレッドで読んで、TextBoxに表示するプログラム。voidのDelegateはActionを使えばいい。さらに匿名メソッドにする。
private void button1_Click(object sender, EventArgs e)
{
FileStream fs = new FileStream(@"D:\dir1\test.txt", FileMode.Open );
_by = new Byte[ fs.Length ];
fs.BeginRead( _by, 0, (int)fs.Length, new AsyncCallback( ReadCallback2 ), fs );
}
void ReadCallback2( IAsyncResult res )
{
FileStream fs = (FileStream)res.AsyncState;
fs.EndRead( res );
fs.Dispose();string s = System.Text.Encoding.UTF8.GetString( _by );
textBox1.Invoke( new Action( delegate(){ textBox1.Text=s;}) );
}
5、AsyncCallback内も匿名メソッドにすれば、1になる。