サーバーからレポートを取得して Silverlight GUI に返す Web サービスがあります。GUI には、次の関数を呼び出すイベント ハンドラーがあります。
private void PopulateDataGrids()
{
try
{
reportTitle = reportDataUtil.ReportHeader.Rows.First(r => r.Items[ReportTools.FIELDNAME_STRING].ToString() == ReportTools.FIELDVALUE_TITLE).Items[ReportTools.FIELDVALUE_STRING].ToString();
dg_Report_Header.DataSource = reportDataUtil.ReportHeader;
dg_Report_Header.CanUserSortColumns = false;
dg_Report_Header.CanUserReorderColumns = false;
dg_Report_Header.CanUserResizeColumns = true;
dg_Report_Header.DataBind();
dg_Report_Header.UpdateLayout();
dg_Report_Detail.DataSource = reportDataUtil.ReportDetails;
dg_Report_Detail.CanUserSortColumns = true;
dg_Report_Detail.CanUserReorderColumns = true;
dg_Report_Detail.CanUserResizeColumns = true;
dg_Report_Detail.DataBind();
dg_Report_Detail.UpdateLayout();
//Hide the ElementID colmun
if (dg_Report_Detail.Columns.Count > 0)
{
var col = dg_Report_Detail.Columns.FirstOrDefault(dc => dc.Header.ToString() == NetVisSolution.Reports.ReportTools.COLUMNNAME_ELEMENTID);
if (col != null)
{
col.Visibility = System.Windows.Visibility.Collapsed;
}
}
}
catch (Exception)
{
ClearResources();
closeReportDataViewer();
ErrorWindow.CreateNew("Unable to open selected report data, the file maybe corrupted or not \nin the server specified location.");
//throw new Exception(ex.Message, ex.InnerException);
}
}
問題は、詳細テーブルの長さが 14000 行になり、1 メガバイト以上を占めることです。このようなレポートが読み込まれると、dg_Report_Detail.DataBind(); 呼び出しには数分かかり、GUI がロックされます。
これを非同期で行う簡単な方法、またはアプリケーションの応答性を維持する方法はありますか?
前もって感謝します、
--- アリステア。