0

ネストされたクラスを使用して2つのクラスを1つの引数に渡して、バックグラウンドワーカーに送ることができます。これまでのところ、単一の引数をバックグラウンドワーカーに渡すことに成功しましたが、ネストされたクラスを使用してそれを実行しています。その結果、両方または必要なクラスを同じ引数に渡してしまいます。これまでのところ、ここで私が使用しているコードの一部です:ネストされたクラスを使用して複数の引数をバックグラウンドワーカーに渡す

これは入れ子のクラスで私が使用しようとしています:

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内でネストされたクラスを定義し

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

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

再び.TheTimeZoneと.TheAccountName経由でアクセス 'BackgroundWorker'を使用しないでください。代わりに、 'await'を使用してください。 – SLaks

+0

そのコードを切り替えることができるところです。 –

+0

MyBackGroundWorkerObject内にネストされたクラスを定義しましたが、TimeZone型の変数も、MyBackGroundWorkerObjectクラス内で宣言されたAccountName型の変数もありません。 –

答えて

0

が、何の変化もありませんTimeZone型のものでも、MyBackGroundWorkerObjectクラスの中で宣言された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を渡すときにそれらにアクセスすることができます。 doWorkは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); 

+0

あなたは死んでいますが、これはかなり多くの変数が宣言されている箇所とバックグラウンドに送信する部分を除いて、私が必要とするものは2つの異なる領域(Form1()とButtonClick())にあります。ユーザに正しいフィールドを選択する時間を与える。だから私はこれを得るだろう:backgroundWorker1.RunWorkerAsync(myBackGroundWorker1);ボタンをクリックして作業するには? –

+0

これはあなたのUIに完全に依存します。ユーザが例えばSelectedItemChangedイベントで使用できるさまざまなリストボックス(名前とタイムゾーン)のそれぞれは、作成されたフォームレベルのMyBackGroundWorkerObjectのプロパティをそれぞれ入力し、ボタンのクリックイベントでそのイベントを渡します。もう一度これに答えるには十分なコードがなく、まったく別個の質問です。 –

+0

あなたの答えはありがとうございます。私はあなたが私に与えた資源に基づいて私の質問に十分に答えたと思います:) –

関連する問題