Dispose, вызываемый Component.Finalize () в потоке, не являющемся пользовательским интерфейсом, означает ли это, что методы Dispose всегда должны быть безопасными для потока? - PullRequest
2 голосов
/ 19 июля 2011

Я проверил, в каком потоке вызваны мои методы Dispose (bool).Когда приложение запущено, это всегда поток пользовательского интерфейса, который вызывает Dispose, например, при нажатии на [x], чтобы закрыть форму.Но когда я закрываю все приложение, многие методы Dispose вызываются в (одном) другом потоке.Когда я выкидываю трассировку стека, я вижу, что все они вызываются из System.ComponentModel.Component.Finalize ().

Означает ли это, что все мои методы Dispose необходимо сделать поточно-ориентированными?Или WinForms гарантирует, что поток пользовательского интерфейса больше не будет касаться этих объектов, и он также устанавливает какое-то отношение «произошло до» между потоком пользовательского интерфейса и тем, который сейчас завершается?

1 Ответ

2 голосов
/ 19 июля 2011

Да, финализатор работает в отдельном потоке. Обычно это не проблема, потому что когда объект завершен, он больше не доступен ни одному пользовательскому потоку (например, потоку пользовательского интерфейса). Таким образом, в финализаторе обычно не требуется потокобезопасность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...