簡體   English   中英

您如何將 List<> of Lists<> 傳遞給后台工作人員?

[英]How do you pass a List<> of Lists<> to a background worker?

我有一個正在處理兩個列表的 backgroundWorker。 我需要將列表傳遞給工人。 結果是空列表。

傳遞列表(和其他 2 個參數)的代碼。 在我的測試中,每個列表都有 20+ 項,並且List<>項顯示這 20+ 項在調用之前完好無損。 在檢查員中,他們說“計數”,然后是物品數量。

List<Object> arguments = new List<object>();

// Add arguments to pass to background worker
arguments.Add(managerSource);
arguments.Add(managerDestination);
arguments.Add(source as List<EntityTypeContainer>);
arguments.Add(destination as List<EntityTypeContainer>);
// Invoke the backgroundWorker
Main.bgWorkerCopyEntityTypes.RunWorkerAsync(arguments);

我已經調試了backgroundWorker的DoWork方法。 在接收 arguments 參數時,它們已經是“空的”。 空我的意思是參數List<>中的條目顯示為“Count 0”。 如果我將它們移動到強制轉換變量中,它們仍然是 0。我已經在下面列出了代碼,但是一旦調用該方法,問題就會顯現出來。

   private void bgWorkerCopyEntityTypes_DoWork(object sender, DoWorkEventArgs e)
    {
        List<object> arguments = (List<object>)e.Argument;
        RemoteManager managerSource = (RemoteManager)arguments[0];
        RemoteManager managerDestination = (RemoteManager)arguments[1];
        List<EntityTypeContainer> source = (List<EntityTypeContainer>)arguments[2];
        List<EntityTypeContainer> destination = (List<EntityTypeContainer>)arguments[3];

任何幫助表示贊賞!

為參數創建一個類:

public class BgwArgs
{
    public string ManagerSource { get; set; }
    public string ManagerDestination { get; set; }
    public List<EntityTypeContainer> Source { get; set; }
    public List<EntityTypeContainer> Destination { get; set; }

}

創建該類的實例並填充它:

var bgwargs = new BgwArgs();
bgwargs.ManagerSource = "whatever";
// etc.

交上來:

Main.bgWorkerCopyEntityTypes.RunWorkerAsync(bgwargs);

然后獲取其成員:

private void bgWorkerCopyEntityTypes_DoWork(object sender, DoWorkEventArgs e)
{
    var myArgs = (BgwArgs)e.Argument;
    var managerSource = myArgs.ManagerSource;
    // etc.
}

暫無
暫無

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

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