Чтобы поиграть с многопоточностью, делегатами и специалистами по фону, я собираю несколько небольших приложений, у меня возникли небольшие проблемы с одним из них.
У меня есть форма Windows, с текстовым полем, кнопкой и richttext.
Когда я нажимаю кнопку, текст в текстовом поле используется в качестве параметра для создания экземпляра класса, например:
public partial class Form1 : Form
{
private BackgroundWorker backgroundWorker;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
backgroundWorker = new BackgroundWorker();
backgroundWorker.DoWork += new DoWorkEventHandler(worker_DoWork);
backgroundWorker.RunWorkerAsync();
}
void worker_DoWork(object sender, DoWorkEventArgs e)
{
new Thread((ThreadStart)delegate()
{
this.BeginInvoke((ThreadStart)delegate()
{
foreach (string line in textBox1.Lines)
{
Dig digger = new Dig(line, textBox1.Text);
digger.DomainChecked += new Dig.DomainCheckedHandler(OnUpdateTicker);
string response = digger.GetAllInfo();
richTextBox1.AppendText(response);
Application.DoEvents();
}
});
}).Start();
}
void OnUpdateTicker(string msg)
{
new Thread((ThreadStart)delegate()
{
this.BeginInvoke((ThreadStart)delegate()
{
label4.Text = msg;
Application.DoEvents();
});
}).Start();
}
}
При отладке я столкнулся с textBox1.Lines, выдавшим исключение типа «Microsoft.VisualStudio.Debugger.Runtime.CrossThreadMessagingException»
Любые советы, как решить эту проблему?