0

わかりましたので、一連のカスタム イベントの実装に取り​​組んでいます。それらは主にマルチスレッド環境で使用され、スレッド全体で主要な成果を伝えます。これで、今のところこの簡単なセットアップができました。

public delegate void TestEventHandler(object sender, TestEventArgs e);

public class Test
{
    bool _stopTesting = false;
    int _runs = 0;

    public event TestEventHandler Tester;

    protected virtual void OnTest(TestEventArgs e)
    {
        TestEventHandler hand = Tester;
        if (hand != null)
            hand(this, e);
    }

    public void StartTest()
    {
        while (!_stopTesting)
        {
            _runs++;
            TestEventArgs e = new TestEventArgs(true, 100000);
            OnTest(e);
        }
    }
}

public class TestMe
{
    public void TestMeHard(object sender, TestEventArgs e)
    {
        Test check = sender as Test;
        Console.WriteLine(e.Message);
    }
}

イベント引数クラスは別の場所で定義されています。私の質問はこれです、senderオブジェクトはスレッドセーフですか、そして初心者の質問を許しますが、senderオブジェクトは参照ですか、それともコピーですか? 同様に、送信者オブジェクトへの変更は、イベントをトリガーした実際のオブジェクトに反映されますか?

4

1 に答える 1

1

送信者オブジェクトは参照であり、コピーではありません。

スレッド セーフの問題は、sender 引数で渡されるオブジェクトによって異なります。送信側オブジェクトは一般的にキャストされるため、使用するには適切な型にキャストする必要があります。スレッドセーフかどうかを判断するのは難しいため、任意のオブジェクトを表すことができます。

これを読んで、スレッドセーフなクラスの書き方を理解してください

于 2013-05-03T12:05:30.877 に答える