我已經制作了一個示例程序,它在後臺線程上生成每秒2000個整數,當它結束時它會觸發一個事件,它從隨機生成的數據在GUI上繪製圖形(我有在我的線程內模擬真實測量的睡眠)。從後臺訪問GUI線程
private void SetChart(System.Windows.Forms.DataVisualization.Charting.Series series)
{
if (InvokeRequired)
{
SetChartCallback d = new SetChartCallback(SetChart);
this.Invoke(d, new object[] { series });
}
else
{
chart1.Series[0] = series;
chart1.Series[0].Name = "Generated Data";
}
}
我在MSDN站點上找到了這種方法。它工作正常,唯一的問題是,當我關閉應用程序。有時出現錯誤消息:
無法訪問處置的對象。
對象名稱:'Form1'。
當我關閉程序時,它會處理所有的元素,我怎樣才能防止這個錯誤發生?
推薦的方法是不讓表單關閉,直到完成所有後臺線程。例如禁用關閉黃油,或重寫關閉事件以通知用戶當前正在背景中發生的事情,並稍後再試。否則,如果讓表單關閉,它將在後臺處理仍然發生時消失... – 2013-02-25 23:46:09
現在我正在檢查Thread.IsAlive布爾值,但是如果它返回true並且我調用thread.Join() - 程序凍結,沒有任何反應。 – patex1987 2013-02-26 00:07:25
你在哪裏調用thread.join?如果你在表單關閉時調用它,它會阻塞,直到你的後臺線程完成 - 這就是Join所做的。 – 2013-02-26 00:14:18