Имеется две формы Form1 и Form2
Имеется функция в Form1:
public void setLog(string txt)
{
if (this.richTextBox1.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(setLog);
this.Invoke(d, new object[] { txt + "\n" });
}
else
{
this.richTextBox1.Text = this.richTextBox1.Text + txt + "\n";
this.richTextBox1.SelectionStart = this.richTextBox1.Text.Length;
this.richTextBox1.ScrollToCaret();
try
{
string path = Directory.GetCurrentDirectory() + "\\udp.log"; // Get the current directory.
DateTime current = DateTime.Now;
System.IO.StreamWriter file = new System.IO.StreamWriter(path, true);
file.WriteLine(current + ": " + txt + "\n");
file.Close();
}
catch (Exception e)
{
MessageBox.Show("Произошла непредвиденная ошибка.\n" + e, "Ошибка");
}
}
}
Так же имеется отдельный тред для подключения и выполнения запроса в Form1:
public Form1()
{
InitializeComponent();
setLog("Reading sql config.");
Thread MyThread = new Thread(new ThreadStart (loadSQL));
MyThread.Start();
}
...
private void loadSQL()
{
MySqlConnection connection = new MySqlConnection(connectionString);
...
setLog("Done. Loaded " + count + " servers.");
}
Суть: если не использовать мультипоточность, проблем с setLog не возникает при вызове Form2.
А если используется и вызвать Form2, то вываливается ошибка: Invoke or BeginInvoke cannot be called on a control until the window handle has been created.
this.Invoke(d, new object[] { txt + "\n" }); // вот на этой линии в функции setLog
Вопрос: как заставить все правильно работать и избежать этого эксцепшена?


Тема закрыта
