0

コードでエラーが発生します。

クロススレッド操作が無効です: コントロール 'listBox1' は、それが作成されたスレッド以外のスレッドからアクセスされました

コード:

 private void button2_Click(object sender, EventArgs e)
 {
     Thread t1 = new Thread(mult);
     t1.Start();
 }
 public void mult()
 {
     FileStream fq = new FileStream(textBox1.Text, FileMode.OpenOrCreate, FileAccess.Read, FileShare.ReadWrite);
     StreamReader s = new StreamReader(fq);
     while (!s.EndOfStream)
     {
         Thread.Sleep(500);
         listBox1.Items.Add(s.ReadLine()); //error at this line

     }

     s.Close();
4

2 に答える 2

0

DOT-NET では、ユーザーが作成したスレッドから UI 要素を変更することはできません。コントロールを変更できるのは、(コントロールを作成した) プライマリ スレッドだけです。つまり、新しいスレッド内からリスト ボックスのエントリを更新することはできません。

のような他の戦略がありBackgroundWorkerます。@Rotem が投稿したリンクを参照し、BackgroundWorker をグーグルで検索してください。

更新: リンクをたどって道に進むことにした場合は、代わりにListBox1.Invoke()を使用することをお勧めします。BeginInvokeInvoke

于 2013-09-01T14:54:18.070 に答える
0

この周りにリストボックスの更新を配置します。

this.Invoke(new MethodInvoker(delegate()
{
 //stuff
}));
于 2013-09-01T14:56:37.253 に答える