0

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

Это вложенный класс Я пытаюсь использовать:

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); 

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

MyBackGroundWorkerObject myBackGroundWorker1 = new MyBackGroundWorkerObject(); 
object obj = ddlAccounts.SelectedItem; 

      MyBackGroundWorkerObject.AccountName acct = obj as MyBackGroundWorkerObject.AccountName; 
backgroundWorker1.RunWorkerAsync(acct); 
+0

Не используйте 'BackgroundWorker'. Вместо этого используйте 'await'. – SLaks

+0

Помимо того, что это вариант для переключения этого кода. –

+0

Вы определили вложенные классы внутри MyBackGroundWorkerObject, но нет переменной типа TimeZone или типа AccountName, объявленного внутри класса MyBackGroundWorkerObject. –

ответ

0

Вы определили вложенные классы внутри MyBackGroundWorkerObject, но нет ни одной переменной типа TimeZone или типа AccountName, объявленного внутри класса MyBackGroundWorkerObject.

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 снова

+0

Вы мертвы, это в значительной степени то, что мне нужно, кроме той части, где у меня есть большая часть объявленных переменных, и где я отправляю ее в backgroundworker, находятся в двух разных областях (Form1() и ButtonClick()), чтобы дать пользователю время для выбора правильного поля. Итак, как бы я получил это: backgroundWorker1.RunWorkerAsync (myBackGroundWorker1); работать с кнопкой? –

+0

Ну, это полностью зависит от вашего пользовательского интерфейса. Если пользователь выбирает, например, что-то из разных ящиков списка (имя и часовой пояс), которые вы могли бы на события SelectedItemChanged, соответственно заполнили свойства MyBackGroundWorkerObject созданного уровня формы, а затем просто передали это на событие нажатия кнопки. Снова здесь недостаточно кода, чтобы ответить на этот вопрос, и это совершенно отдельный вопрос. –

+0

Удивительно, спасибо за ваш ответ. Я думаю, что вы достаточно ответили на мой вопрос, исходя из ресурсов, которые я вам дал :) –