私はBackgroundWorker
とスレッドを使用しています、アプリケーションは、このスレッドが完了するまで待つために、他の操作を50000レコードをフェッチするために長い時間待っています。セカンダリスレッドの使用中に待機プロセスを回避するにはどうすればよいですか。スレッドは、長い時間待つ。どのように私はこれを避けることができます
private void btnExrtPDF_Click(object sender, RoutedEventArgs e)
{
if (DetailsOrSummary == "Details")
isDetails = true;
Dispatcher.BeginInvoke(DispatcherPriority.Input, new ThreadStart(() =>
{
try
{
DetailReportFCBuySell = AlyexWCFService.DL.DLTTIn.FCBuySELL(
transactionName, isDetails,
Convert.ToDateTime(dateEdtStartDate.EditValue).Date,
Convert.ToDateTime(dtpEditEndDate.EditValue).Date,
Customerid, ProductID, branchID,
NoOfRecords, PageIndex - 1, isBuy);
worker.RunWorkerAsync();
}
catch
{
object obj = new object();
}
}));
}
private void worker_DoWork(object sender, DoWorkEventArgs e)
{
Dispatcher.Invoke(new Action(() =>
{
System.Data.DataTable batchFCSB = new System.Data.DataTable();
int row = 0;
if (DetailReportFCBuySell.FirstOrDefault().TotalRecords > toFetchRecords)
{
long RecordsIcrease = 1000;
batchFCSB = DetailReportFCBuySell.ToDataTable();
//Collection.Add(row, batchFCSB);
row = 1;
PageIndex++;
for (long k = toFetchRecords; k < DetailReportFCBuySell.FirstOrDefault().TotalRecords; k = +toFetchRecords)
{
new AlxServiceClient().Using(channel =>
{
ObservableCollection<DLReports.FCBuySellDetail> temp
= AlyexWCFService.DL.DLTTIn.FCBuySELL(
transactionName, isDetails,
Convert.ToDateTime(dateEdtStartDate.EditValue).Date,
Convert.ToDateTime(dtpEditEndDate.EditValue).Date,
Customerid, ProductID, branchID, NoOfRecords, PageIndex - 1, isBuy);
DetailReportFCBuySell = DetailReportFCBuySell.Union(temp).ToObservableCollection();
row++;
PageIndex++;
});
toFetchRecords = toFetchRecords + RecordsIcrease;
}
}
}), DispatcherPriority.ContextIdle);
}
UIコンポーネントの更新と観察可能なコレクションの操作がUIスレッドで行われていることを確認してください。現在、UIスレッドですべてを実行しています。 – WBuck
私はすでにpblmを解決してくれました。 –