2009-05-05 5 views
0

Я работаю с C# и CF, и мне нужно использовать MessageWindow для перехвата сообщений Windows.MessageWindow - Как я могу узнать, был ли он уничтожен?

Возможны сценарии, в которых MessageWindow неожиданно умирает. Это проблема для меня, поскольку сообщения, которые она получает, являются очень важными, и я хотел бы зарегистрировать факт, что Окно умерло.

К сожалению, я не вижу никакого способа (по крайней мере, не в управляемом API), чтобы получить такое уведомление. Может ли кто-нибудь помочь?

ответ

1

Не уверен, что вы подразумеваете под «умирает», но, вообще говоря, когда окно уничтожается (в том числе и в основе MessageWindow), вы получите вызов WM_DESTROY. Можете ли вы найти это в WndProc?

+0

Я в итоге просто создал его на фоновом потоке и запустил Application2.Run() из OpenNETCF. Код регистрации живет под ним, поэтому мы регистрируемся при выходе. – Quibblesome

1

Некоторые идеи:

Можете ли вы «пинг» MessageWindow путем создания специального сообщения собственного каждого интервала X? затем проверьте этот «пинг» таким образом, что вы можете быть уверены в обнаружении разрушения в течение ок. X время.

Или вы можете переопределить вызовы Dispose или Finalize? если они вызваны. Я также предполагаю, что исключение не бросается.

+0

Да, я мог бы пинговать, MessageWindow не реализует IDisposable (на базовом уровне), и финализация не будет особенно детерминированной, и я действительно не хочу касаться других объектов (например, регистратора) в финализаторе. – Quibblesome

Смежные вопросы