這裏是我遇到的問題(VS 2010,.NET 3.5,水晶報表2008年):如何停止水晶報表加載在VB/C#.NET背景
我有一個形式, frmReports,它有一個CrystalReportsViewer控件。此表單由另一個表單的button_click實例化。在加載frmReports時,會將一個報告文檔加載到查看器中,這需要至少3分鐘的時間才能顯示(效率在這裏沒有問題;數據庫非常大,報告使用存儲過程)。
因爲這個原因,我創建了一個後臺工作人員,檢查鍵盤組合。這應該提示用戶他已選擇中斷加載,處理所有內容並關閉表單(frmReports)。
一切正常,關鍵事件發送,用戶被通知(後臺工作人員正確處理),但在按下確定關閉消息框後,主線程保持鎖定狀態(我無法做任何形式的任何形式)。
我已經使用了ANTS內存分析器,並且所有CrystalDecisions程序集仍然被加載到內存中,並且報告文檔實際上仍在後臺工作。
我試過crViewer.ReportSource.Close()
,將其設置爲= nothing
,ReportSource.Database.Dispose()
,改變AppDomain
和卸載組件,迫使GC.Collect()
,許多組合,並沒有什麼工作 - 該報告仍然沒有釋放其資源,並不斷努力在後臺加載(我認爲在一些非託管線程中暫停我的程序不會中斷任何事情)。
是否有任何方法可以正確卸載Crystal Reports加載的所有內容? 或強行關閉與數據庫的連接 - 連接水晶報表與數據庫建立關係(運行附加的存儲過程)?
我以前用計時器試過,而且得到了同樣的結果。 **我可以殺死線程**,但不知何故報告會在後臺繼續加載,無論我在後臺工作或主線程中做什麼,我都無法控制它。我認爲查詢繼續在sql服務器上運行,我不知道如何殺死它。請記住,有多個客戶端和一個服務器,因此可能會有許多類似的查詢同時運行,因此我不知道如何確定正確的查詢。 –