等待很长时间从数据库中获取数据
在获取数据的同时,似乎很长一段时间,我们无法在这段时间内完成另一项任务。我正在为此使用BAckGroundWOrker。但似乎获取所有数据后等待很长一段时间仅在该应用运行过程中出现细微等待很长时间从数据库中获取数据
private void btnExrtPDF_Click(object sender, RoutedEventArgs e)
{
btnExrtPDF.IsEnabled = false;
Collection.Clear();
long NoOfRecords = 10000;
long RecordsIcrease = 10000;
SaveFileDialog xsfd = new SaveFileDialog()
{
FileName = "Book1",
DefaultExt = ".xlsx",
Filter = "Excel Document|*.xlsx",
InitialDirectory = new System.IO.DirectoryInfo(Environment.GetFolderPath(Environment.SpecialFolder.Desktop)).ToString()
};
Nullable<bool> result = xsfd.ShowDialog();
System.Data.DataTable batchFCSB = new System.Data.DataTable();
int row = 0;
if (result == true)
{
DetailReportFCBuySell = AlyexWCFService.DL.DLTTIn.FCBuySELL(transactionName, isDetails, Convert.ToDateTime(dateEdtStartDate.EditValue).Date, Convert.ToDateTime(dtpEditEndDate.EditValue).Date, Customerid, ProductID, branchID, NoOfRecords, PageIndex - 1, isBuy);
batchFCSB = DetailReportFCBuySell.ToDataTable();
Collection.Add(row, batchFCSB);
row = 1;
PageIndex++;
for (long k = NoOfRecords; k < DetailReportFCBuySell.FirstOrDefault().TotalRecords; k = +NoOfRecords)
{
new AlxServiceClient().Using(channel =>
{
DetailReportFCBuySell = new ObservableCollection<DLReports.FCBuySellDetail>();
DetailReportFCBuySell = AlyexWCFService.DL.DLTTIn.FCBuySELL(transactionName, isDetails, Convert.ToDateTime(dateEdtStartDate.EditValue).Date, Convert.ToDateTime(dtpEditEndDate.EditValue).Date, Customerid, ProductID, branchID, NoOfRecords, PageIndex - 1, isBuy);
batchFCSB = new System.Data.DataTable();
batchFCSB = DetailReportFCBuySell.ToDataTable();
Collection.Add(row, batchFCSB);
row++;
});
NoOfRecords = NoOfRecords + RecordsIcrease;
}
for (int k = 0; k < Collection.Keys.Count; k++)
{
string xlsxFile = string.Empty;
xlsxFile = System.IO.Path.GetTempFileName();
TableView temp = new TableView();
temp.DataContext = (Collection.Where(i => i.Key == k).FirstOrDefault().Value);
// ExportToXlsx(temp, xlsxFile);
}
}
m_oWorker.RunWorkerAsync();
}
我做的EditValue到一个单独的对象,并调用该对象的线程
DateTime startDate = Convert.ToDateTime(dateEdtStartDate.EditValue).Date;
DateTime endDate = Convert.ToDateTime(dtpEditEndDate.EditValue).Date;
private DetailReportFCBuySell FetchRecord()
{
return ObservableCollection<DLReports.FCBuySellDetail> temp = AlyexWCFService.DL.DLTTIn.FCBuySELL(transactionName, isDetails, startDate, endDate, Customerid, ProductID, branchID, NoOfRecords, PageIndex - 1, isBuy);
}
代码块恍如从Click事件的开始运行,而不必调用BGWorker,考虑到代码块移动到一个单一的像
private DetailReportFCBuySell FetchRecord()
{
return AlyexWCFService.DL.DLTTIn.FCBuySELL(transactionName, isDetails, Convert.ToDateTime(dateEdtStartDate.EditValue).Date, Convert.ToDateTime(dtpEditEndDate.EditValue).Date, Customerid, ProductID, branchID, NoOfRecords, PageIndex - 1, isBuy);
}
功能,并呼吁在m_oWorker做工作时此功能
private void bw_DoWork(object sender, DoWorkEventArgs e)
{
FetchRecord();
}
阅读更多关于https://msdn.microsoft.com/en-us/library/cc221403(v=vs.95).aspx#code-snippet-3
它使我等待我的申请 –
我可以更多地了解情况吗?另请考虑使用.NET中的任务,阅读更多内容:https://msdn.microsoft.com/en-us/library/system.threading.tasks.task(v=vs.110).aspx –
嗨我可以知道的是后台工作援引在哪里?这看起来有点直接通过使用UI线程 –
m_oWorker.RunWorkerAsync(); –
这是在这里面使用的。和我在构造函数 –