0

私のプロジェクトには 3 つのクラスと 2 つのスレッドがあります。スレッドが作成されたクラスのプロパティにアクセスすると、正しい値が得られます。私が読んでいるクラスは、2 番目のスレッドを開始します。この新しいスレッドから、2 番目のクラスのプロパティを読み取りたいと思います。

class1 に値を設定すると、値は 1 ですが、class3 の値は 0 です。

class test
{
    public void main()
    {
        Class2 cl = new Class2;
        thread th = new thread(new threadstart(a.start));
        th.start()

        cl.test=1;
    }
}

class Class2
{
    private int test;
    public int test
    {
        get { return test;}
        set {test = value;}
    }

    public void start()
    {
        Class3 cls = new Class3();
        thread th = new thread(new threadstart(cls.begin));
        th.start();
    }
}

class Class3
{
    public void begin()
    {
        Class2 cl = new Class2();
        MessageBox.show(cl.test.tostring());
    }
}
4

2 に答える 2

2

の 2 つの別個のインスタンスがありClass2ます。で作成されClass3たインスタンスは、 で作成したインスタンスの値がわかりませんClass1

プロパティの 1 つのインスタンスのみtestを処理する必要があることがわかっている場合は、静的にすることができます。

public static int Test { get; set; }

そして、次を使用して参照します。

Class2.Test = 1;

余談ですが、これがどのようにコンパイルされるかはわかりません。これは、「test」という名前のパブリック プロパティを取得して、.ini のプライベートな「test」変数にアクセスするためですClass2。通常、人々はプライベート変数に_test (個人的な好みによって異なります) のような名前を付けるか、プロパティがプライベート変数にアクセスする以外に何もしていない場合は、上記のようにプライベート変数を完全に省略します。

于 2013-08-07T21:05:46.743 に答える
0

スレッドの管理には、組み込みの .NET ライブラリを使用します。タスクの並列性

ここでいくつかのチュートリアルに従ってください。これらのオブジェクトにより、スレッドの処理と結果の待機がはるかに簡単になります。スレッドセーフなオブジェクトも利用できます。

スレッドセーフの同等物:

Array,List=>ConcurrencyBag<T>

Dictionary<K, T>=>ConcurrentDictionary<K, T>

于 2013-08-07T21:07:44.253 に答える