2016-08-25 4 views
0

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(); 
} 
+0

Hallo Thread nennen Ich weiß, wo der Hintergrund Arbeiter aufgerufen? Mit dem UI-Thread sehen Sie ein wenig direkt aus. –

+0

m_oWorker.RunWorkerAsync(); –

+0

Dies wird innerhalb dieses verwendet. und die Methoden von Background ich im Konstruktor verwendet –

Antwort

1

ich mache das EditValue zu einem separaten Objekt und das Objekt in der

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); 
} 
0

-Code Block vom Anfang des Click-Ereignis scheint, wie läuft Tagrunnig ohne die BGWorker Aufruf, sollten Sie den Code-Block zu einem einzigen bewegen Funktion wie

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); 
} 

und diese Funktion in Ihrem m_oWorker Do Work Event

private void bw_DoWork(object sender, DoWorkEventArgs e) 
{ 
    FetchRecord(); 
} 

Aufruf lesen Sie mehr auf https://msdn.microsoft.com/en-us/library/cc221403(v=vs.95).aspx#code-snippet-3

+0

es mich zu warten, meine Bewerbung für einige –

+0

Kann ich mehr über die Situation wissen? Beachten Sie auch die Aufgabe in .NET, lesen Sie mehr: https://msdn.microsoft.com/en-us/library/system.threading.tasks.task(v=vs.110).aspx –

Verwandte Themen