Если вы получаете это сообщение во время сохранения или компиляции сборки, просто закройте все файлы, а затем откройте любой файл для компиляции и сохранения.
Для меня причина в том, что я переименовал файл, и старый файл все еще был открыт.
Убедитесь, что вы отменили регистрацию обработчиков сообщений, когда они вам больше не нужны. Посланник сохраняет ссылку на зарегистрированные методы, и это мешает им собирать мусор.
Поэтому для ViewModels: убедитесь, что вы вызвали очистку после того, как вы сделали (или реализуете IDisposable и вызывают очистку оттуда).
Для представлений (элементов управления, Windows или аналогичных) вызовите Messenger.Unregister в случае, которое возникает при разрыве представления, например выгруженное событие.
Это известное поведение MVVM и обсуждалось в нескольких местах.
Я видел этот вопрос раньше. Это связано с тем, что Messenger.Default.Register вызывается не один раз. Класс MVVMLight Messenger будет регистрировать один и тот же элемент «x» количество раз. Вот почему, когда вы вызываете «Отправить», вы получаете его много раз.
Кто-нибудь знает, как предотвратить MVVMLight от регистрации несколько раз?
действительно старый, но думал, что я отвечу на всякий случай, если кому-то это понадобится. В то время я был довольно необычен для Silverlight, и проблема закончилась тем, что была утечка памяти, поскольку viewModel, который имел несколько экземпляров, все еще находился в памяти.
Очень старый вопрос, но я решил проблему, выполнив это:
static bool isRegistered = false;
, а затем в конструкторе:
if( !isRegistered )
{
Messenger.Default.Register<MyMessage>(this, OnMessageReceived);
isRegisterd = true;
}
Как отмечали другие участники, одно и то же сообщение регистрируется несколько раз. Я заметил, что это поведение происходит при навигации к View X, а затем переводит обратно в View Z, где сообщение зарегистрировано в конструкторе Z ViewModel. Одним из решений является установка свойства NavigationCacheMode в Required
<Page
........
........
NavigationCacheMode="Required">