Использование вложенного класса для передачи нескольких аргументов в фоновый рабочий
Я пытаюсь использовать вложенный класс, чтобы два класса передавались в один аргумент, чтобы я мог отправить его фоновому работнику. До сих пор мне удавалось передать отдельные аргументы фоновому работнику, но мне еще предстоит сделать это с помощью вложенного класса, где я в конечном итоге передаю оба или желаемые классы в один и тот же аргумент. Итак, вот часть кода, который я использую:
Это Вложенный класс, который я пытаюсь использовать:
public class MyBackGroundWorkerObject
{
public class TimeZone
{
public string Zone;
public int difference;
public override string ToString()
{
return Zone;
}
}
public class AccountName
{
public string AccountSid;
public string AuthToken;
public string Name;
public override string ToString()
{
return Name;
}
}
}
Вот пример одного из классов в действии:
MyBackGroundWorkerObject.AccountName acct = new MyBackGroundWorkerObject.AccountName();
//AccountName acct = new AccountName();
acct.AccountSid = "abcd";
acct.AuthToken = "xyz";
acct.Name = "Potato";
ddlAccounts.Items.Add(acct);
MyBackGroundWorkerObject.TimeZone region = new MyBackGroundWorkerObject.TimeZone();
//TimeZone region = new TimeZone();
region.Zone = "UTC";
region.difference = 0;
comboBox1.Items.Add(region);
И вот та часть, в которой я совершенно запутался, я хотел бы иметь возможность использовать оба из них при вызове из формы окна, откуда он получает некоторые из введенных данных. Я не уверен, как заставить оба этих класса работать в соединении, где я могу отправить их оба одновременно фоновщику:
MyBackGroundWorkerObject myBackGroundWorker1 = new MyBackGroundWorkerObject();
object obj = ddlAccounts.SelectedItem;
MyBackGroundWorkerObject.AccountName acct = obj as MyBackGroundWorkerObject.AccountName;
backgroundWorker1.RunWorkerAsync(acct);
1 ответ
Вы определили вложенные классы внутри MyBackGroundWorkerObject, но в классе MyBackGroundWorkerObject не объявлено ни переменной типа TimeZone, ни типа AccountName.
public class MyBackGroundWorkerObject
{
public class TimeZone
{
public string Zone;
public int difference;
public override string ToString()
{
return Zone;
}
}
public class AccountName
{
public string AccountSid;
public string AuthToken;
public string Name;
public override string ToString()
{
return Name;
}
}
public TimeZone TheTimeZone {get; set;}
public AccountName TheAccountName {get; set;}
}
Теперь вы можете устанавливать свои экземпляры через членов TheTimeZone и TheAccountName соответственно и получать к ним доступ при передаче объекта MyBackGroundWorkerObject.
MyBackGroundWorkerObject myBackGroundWorker1 = new MyBackGroundWorkerObject();
MyBackGroundWorkerObject.AccountName acct = new MyBackGroundWorkerObject.AccountName();
//AccountName acct = new AccountName();
acct.AccountSid = "abcd";
acct.AuthToken = "xyz";
acct.Name = "Potato";
ddlAccounts.Items.Add(acct);
MyBackGroundWorkerObject.TimeZone region = new MyBackGroundWorkerObject.TimeZone();
//TimeZone region = new TimeZone();
region.Zone = "UTC";
region.difference = 0;
comboBox1.Items.Add(region);
myBackGroundWorker1.TheTimeZone = region;
myBackGroundWorker1.TheAccountName = acct;
backgroundWorker1.RunWorkerAsync(myBackGroundWorker1);
Внутри фонового работника doWork приведёт его к MyBackGroundWorkerObject и снова получит доступ к нему через.TheTimeZone и.TheAccountName