簡體   English   中英

使用BackgroundWorker在WPF中使用datagrid中的多個導入按鈕導入Mutiple記錄

[英]Import Mutiple records using multiple import buttons in datagrid in WPF using BackgroundWorker

要求:允許用戶導入多個記錄並允許單擊多個導入按鈕(在DATAGRID中)。

當用戶單擊單個導入按鈕時,我能夠處理導入按鈕功能,但是如果用戶單擊另一個導入按鈕,則無法導入。

下面是我的相同代碼。

 BackgroundWorker bgWorkerUpdate = new BackgroundWorker();

 // Constructor
 public ImportedKeywords()
 {
      bgWorkerUpdate.DoWork += new DoWorkEventHandler(bgWorkerUpdateDoWork);
      bgWorkerUpdate.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bgWorkerUpdate_Completed);
 }

 private void Import_Click(object sender, RoutedEventArgs e)
 {
       if (!bgWorkerUpdate.IsBusy) bgWorkerUpdate.RunWorkerAsync(objSearchRequest);
       else
       {
           bgWorkerUpdate = new BackgroundWorker();
           bgWorkerUpdate.RunWorkerAsync(objSearchRequest);
       }
 }


     public void bgWorkerUpdateDoWork(object sender, DoWorkEventArgs e)
        {
            SearchRequest objSearchRequest = (SearchRequest)e.Argument;//txtUserName.Text;
            importCount = new AdvancedSearching().SearchContent(objSearchRequest, totalRecords, totalRecordsImported, recordsToImport, keywordID, selectedPriority);
        }


  void bgWorkerUpdate_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            imgLoading.Visibility = System.Windows.Visibility.Hidden;
            if (importCount == 0)
            {
                lblMessage.Content = "No record found to import.";
                lblMessage.Foreground = Brushes.DarkRed;
            }
            else
            {

                lblMessage.Content = importCount + " Record(s) imported successfully.";
                lblMessage.Foreground = Brushes.DarkGreen;
                BindList(Convert.ToInt32(tbStartPage.Text), txtSearch.Text, "test");
                MaintainSortingWithPaging(Convert.ToInt32(tbStartPage.Text));
            }
            HideLoading();
        }

創建BackgroundWorker的新實例時,必須再次訂閱DoWorkRunWorkerCompleted事件。 否則,它在運行時不會做任何事情。

if (!bgWorkerUpdate.IsBusy)
    bgWorkerUpdate.RunWorkerAsync(objSearchRequest);
else
{
    bgWorkerUpdate = new BackgroundWorker();
    bgWorkerUpdate.DoWork += bgWorkerUpdateDoWork;
    bgWorkerUpdate.RunWorkerCompleted+= bgWorkerUpdate_Completed;
    bgWorkerUpdate.RunWorkerAsync(objSearchRequest);
}

但是,如果您只想在舊線程仍在運行的情況下,在一個新線程中運行每個作業,那么您也許可以研究其他結構,例如Task.Run

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM