2

スレッドで発生しているエラーは次のとおりです。

クロススレッド操作が無効です。作成されたスレッド以外のスレッドからアクセスされるコントロール'richTextBox8'。

エラーの原因となっている文字列のリストに使用するこのコードがあります。

string[] parts = richTextBox8.Text.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);

今、私は上記のコードをこのコードのような形式に変換する必要があるSystem.Threadingを使用して作業していますが、それを行うことができないか、他の方法がありますか?

richTextBox8.Invoke((Action)(() => richTextBox8.Text += "http://elibrary.judiciary.gov.ph/" + str + "\n"));
4

3 に答える 3

2

あなたの文字列配列(string [])は私にはうまく見えます。richTextBox8 に空白がある場合は、分割を行う必要があります。

スレッドに関しては、次のようにデリゲートを使用してみてください。

    public delegate void MyDelegate(string message);

   //when you have to use Invoke method, call this one:
   private void UpdatingRTB(string str)
   {
       if(richTextBox8.InvokeRequired)
           richTextBox8.Invoke(new MyDelegate(UpdatingRTB), new object []{ msg });
       else
           richTextBox8.AppendText(msg);
   }
于 2012-04-13T12:22:37.913 に答える
1

UI スレッドで行うテキスト抽出のみが必要です。

変数キャプチャあり:

string text = null;
richTextBox8.Invoke((Action)(() => text = richTextBox8.Text));
string[] parts = text.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);

変数のキャプチャーなし (わずかに効率的):

var ret = (string)richTextBox8.Invoke((Func<string>)(() => richTextBox8.Text));
parts = ret.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);
于 2012-04-13T12:36:02.990 に答える
1
string[] parts = null;
richTextBox8.Invoke((Action)(() => 
    {
        parts = richTextBox8.Text.Split(new string[] { " " },
        StringSplitOptions.RemoveEmptyEntries); //added semicolon
    }));
于 2012-04-13T12:24:52.173 に答える