Während das Abrufen der Daten lange dauert, können wir in dieser Zeit keine andere Aufgabe ausführen. verwende zu diesem Zweck BAckGroundWOrker. aber es scheint für lange warten, nachdem alle Daten holen nur die Anwendung FeinWartet lange Abrufen der Daten aus DB
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();
}
Hallo Thread nennen Ich weiß, wo der Hintergrund Arbeiter aufgerufen? Mit dem UI-Thread sehen Sie ein wenig direkt aus. –
m_oWorker.RunWorkerAsync(); –
Dies wird innerhalb dieses verwendet. und die Methoden von Background ich im Konstruktor verwendet –