0

C#でRichTextBox1の値を aに投げるにはどうすればよいですか?BackgroundWorker

public void button4_Click(object sender, EventArgs e)
{
    if (String.IsNullOrEmpty(richTextBox1.Text.Trim())){
        MessageBox.Show("No value in RichTextBox?");
        return;
    }

    if (backgroundWorker1.IsBusy != true)
    {
        // Start the asynchronous operation.
        backgroundWorker1.RunWorkerAsync(richTextBox1);
    }

これが私BackgroundWorkerのコードです:

public void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) {
    HtmlAgilityPack.HtmlDocument document = new HtmlAgilityPack.HtmlDocument();
    foreach (string vr in richTextBox1.Lines)
    {
    ⋮
    }
}
4

3 に答える 3

2

上記の理由により、RichTextBox を渡すことはできませんが、RichTextBox.Lines プロパティである文字列配列を渡して、それを反復処理することはできます。

private void button1_Click(object sender, EventArgs e)
{
    bg.RunWorkerAsync(richTextBox1.Lines);
}

void bg_DoWork(object sender, DoWorkEventArgs e)
{
    string[] lines = (string[])e.Argument;
    foreach(string vr in lines)
    {

    }
}
于 2012-12-24T06:20:54.933 に答える
1
private void button1_Click(object sender, EventArgs e)
    {
        backgroundWorker1.RunWorkerAsync(richTextBox1.Text);

    }

    private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
    {
        string text = (string)e.Argument;
        MessageBox.Show(text);

    }

テキストはオブジェクト e.argument として送信されます。それを取得するには、 e.argument を文字列にキャストします(または、渡す内容に応じて string[] など)

于 2012-12-24T06:00:33.300 に答える
1

通常、メイン UI スレッドのみがフォームおよびコントロールとやり取りできます。

必要なすべてのデータをRunWorkerAsyncメソッドに渡すことを検討してくださいRunWorkerAsync(richTextBox1.Lines.ToList())

于 2012-12-24T02:56:39.467 に答える