後臺工作器在被調用時將文本附加到閃爍控制器上時停止控件,這裏是部分代碼。添加try catch邏輯後,我仍然沒有得到任何例外!使用scintilla NET停止在backgroundworker線程中不凍結GUI
private delegate void DWrite(string text);
private void Write(string text)
{
try
{
scintilla1.AppendText(text);
}
catch (Exception ex) { MessageBox.Show(ex.ToString()); }
}
private void bw_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
string x;
while (true)
{
x = tcw.Read();
// MessageBox.Show(x);
Thread.Sleep(100);
try
{
scintilla1.Invoke(new DWrite(Write), x);
}
catch (Exception ex) { MessageBox.Show(ex.ToString()); }
// scintilla1.Update();
}
我加了這樣的邏輯:
static void MyHandler(object sender, UnhandledExceptionEventArgs args)
{
Exception e = (Exception)args.ExceptionObject;
MessageBox.Show("MyHandler caught : " + e.Message);
}
public void doworkstuff()
{
AppDomain currentDomain = AppDomain.CurrentDomain;
currentDomain.UnhandledException += new UnhandledExceptionEventHandler(MyHandler);
try
{
for (int i = 0; i < 5; i++)
scintilla1.Invoke(new DWrite(Write), tcw.Read());
}
catch (Exception ex)
{ MessageBox.Show(ex.ToString()); }
}
這個問題似乎是與控制它的自我,而不是允許外部線程訪問,以避免死鎖。有沒有一種方法可以在不使用BGWorker的情況下獲得相同的功能? tcw.read()是一個telnet客戶端,它將輸入流傳輸到控件,我希望流(即tcw.read())繼續,直到用戶按下窗體上的停止!
哪裏是啓動後臺工作的代碼?它阻塞等待後臺工作者的線程嗎? – Servy 2013-02-11 20:24:12
什麼是例外? – 2013-02-11 20:34:34
調用其按鈕單擊方法,該方法寫入scintillaNET配置文件,然後發出bw.RunWorkerAsync(); – CodeEmpower 2013-02-11 20:34:59