Возможно, я очень недопонимаю этот сценарий, но именно поэтому я спрашиваю.Что происходит, когда объект, выполняющий поток A, уничтожается нитью B?
Что могло бы произойти в следующей ситуации (предположим, что C# Threading)? Примечание: этот сценарий упрощен для основной проблемы, дополнительные функции игнорируются.
У меня есть 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, не будет ли она удалена мусором co llector? –
@valya, только после прекращения потока - обработчик потока поддерживает ссылку, поэтому ссылка A была не единственной. – Dathan
valya: Нет, стек потока также будет содержать ссылку на 'b', как минимум на 'this'. –