-1

コールバックにメイン スレッド以外のスレッドを使用する非同期読み取りを使用して C# で単純なファイル ストリーム プログラムを作成していますが、テキスト ボックスにファイル コンテンツを書き込もうとするとクロススレッド例外が発生します。ここに私のプログラムがあります:

using System;

namespace Filestream
{
    public partial class Form1 : Form
    {
        FileStream fs;
        byte[] fileContents;
        AsyncCallback callback;
        public Form1()
        {
            InitializeComponent();
        }

        private void synbtn_Click(object sender, EventArgs e)
        {
            openFileDialog1.ShowDialog();
            callback = new AsyncCallback(fs_StateChanged);
            fs = new FileStream(openFileDialog1.FileName, FileMode.Open, FileAccess.Read, FileShare.Read, 4096, true);
            fileContents = new Byte[fs.Length];
            fs.BeginRead(fileContents, 0, (int)fs.Length, callback, null);
        }
        public void fs_StateChanged(IAsyncResult ar)
        {

                if (ar.IsCompleted)
                {
                    *textBox1.Text = Encoding.UTF8.GetString(fileContents);*
                    fs.Close();
                }
        }

    }
}

スターが付いている部分は、例外が発生している部分です。呼び出しを使用しようとしましたが、運がありませんでした。エラーが発生しないように、コードのこの部分を呼び出しで修正できますか。ありがとう。

4

2 に答える 2

1

これを試して。

if(textbox1.InvokeRequired)
{
    textbox1.Invoke(new MethodInvoker(() => textBox1.Text = Encoding.UTF8.GetString(fileContents)));
}
else
{
    textBox1.Text = Encoding.UTF8.GetString(fileContents);
}
于 2013-10-22T13:34:00.893 に答える