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

}

動作中のクラスの 1 つの例を次に示します。

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

1 に答える 1

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 を介して再びアクセスします。

于 2016-11-21T20:28:54.903 に答える