好吧,所以我正在實現一組自定義事件。它們將主要用於多線程環境以在整個線程中傳達主要成就。現在我有這個簡單的設置:C#中的自定義事件特別是發件人對象線程安全
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
對象是線程安全的,並且原諒了noobish的問題,但是sender
對象是引用還是副本?因爲在發送對象的任何變化都會在觸發事件的實際對象中被重新引用嗎?
發件人對象的引用。你可以通過把'hand(this,e)'改成'hand(MakeACopyOf(this),e)'(但你爲什麼要這樣做)來製作你的對象的副本。 – Artemix 2013-05-03 12:14:23
我想確保我在理解中走在正確的道路上。 – Nomad101 2013-05-03 12:23:18