[英]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.