может кто-нибудь объяснить, почему я сталкиваюсь с проблемой с фоновым работником
backgroundWorker1_RunWorkerCompleted работает просто отлично и отправляет текст в textbox1
но
backgroundWorker1_DoWork не работает!
он должен отправить текст «Working ...» на textbox1, но я получаю сообщение об ошибке с
textBox1.Text = textBox1.Text + Environment.NewLine + DateTime.Now + @ ">>" + str;
ошибка, которую я получаю, связана с Cross-Thread
Кто-нибудь может помочь?
cheesr
using System;
using System.ComponentModel;
using System.Windows.Forms;
namespace FolderWatchingGUI01
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public void output(string str)
{
textBox1.Text = textBox1.Text + Environment.NewLine + DateTime.Now +@" >> " +str;
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
output("Working ...");
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
output("Work Completed");
}
private void button1_Click(object sender, EventArgs e)
{
button2.Enabled = true;
button1.Enabled = false;
output("Starting Work");
backgroundWorker1.RunWorkerAsync();
}
private void button2_Click(object sender, EventArgs e)
{
backgroundWorker1.CancelAsync();
output("Work Canceld");
button2.Enabled = false;
button1.Enabled = true;
}
private void Form1_Load(object sender, EventArgs e)
{
}
}
}
Редактировать
Кажется, я могу решить проблему с:
это правильное решение? или это грязный обходной путь, и я не должен этого делать!?!
delegate void outputCallback(string text);
public void output(string str)
{
if (textBox1.InvokeRequired)
{
outputCallback d = output;
Invoke(d, new object[] { str });
}
else
{
textBox1.Text = textBox1.Text + Environment.NewLine + DateTime.Now +@" >> " +str;
}
}