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

事件 args 类在别处定义。我的问题是,sender对象线程是否安全,请原谅这个愚蠢的问题,但sender对象是引用还是副本?发送者对象的任何更改是否会反映在触发事件的实际对象中?

4

1 回答 1

1

发送者对象是一个引用而不是一个副本。

现在到线程安全问题,它取决于在 sender 参数中传递的对象。由于发件人对象通常是强制转换的,因此需要将其强制转换为正确的类型才能使用它。它可以表示任何对象,很难说它是否线程安全。

通过这个来了解如何编写一个线程安全的类

于 2013-05-03T12:05:30.877 回答