我可能會很大誤解這種線程場景,但這就是爲什麼我問。對象運行線程A被線程B銷燬時會發生什麼?
以下情況會發生什麼(假設C#線程)?注意:這種情況被簡化爲核心問題,額外的功能被忽略。
我有2個對象,a和b,它們分別是類A和類B的實例; 'b'是'a'的成員。
'b'正在運行一個處理循環,並且還有其他一些活動不斷做某些事情。在某一時刻,'b'檢測到導致它將事件發送到'a'的情況。當'a'接收到該事件時,它執行以下代碼:
void b_eventFoo()
{
b.UnhookEvents();//clears the delegate that truggered this event function
this.b = new B();
b.HookEvents(this);//connects the new b object to this A
}
舊的'B'對象會發生什麼?原來的'b'仍然在做一些處理,觸發事件的線程仍然可以執行。我不太瞭解線程是否足以預測此場景的結果。
它甚至有問題嗎?
請讓我知道我是否應該澄清任何事情。
如果它是對B的唯一引用,它不會被刪除b y垃圾收集器? – 2009-11-24 19:15:40
@valya,只有線程終止 - 線程處理程序維護一個引用,所以A的引用不是唯一的引用。 – Dathan 2009-11-24 19:17:45
valya:不,線程的堆棧也會持有對'b'的引用,至少是'this'。 – 2009-11-24 19:21:06