Использование вложенного класса для передачи нескольких аргументов в фоновый рабочий

Я пытаюсь использовать вложенный класс, чтобы два класса передавались в один аргумент, чтобы я мог отправить его фоновому работнику. До сих пор мне удавалось передать отдельные аргументы фоновому работнику, но мне еще предстоит сделать это с помощью вложенного класса, где я в конечном итоге передаю оба или желаемые классы в один и тот же аргумент. Итак, вот часть кода, который я использую:

Это Вложенный класс, который я пытаюсь использовать:

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

Другие вопросы по тегам