Здравствуйте.
Есть приложение windows forms, которое работает из трея. В трее висит значок, приложение работает преимущественно в свернутом виде.
В приложении используется несколько потоков, которые работают с picturebox. Перед изменением свойств picturebox я его блокирую:
lock (pictureBox)
{
var updateAction = new Action(() =>
{
pictureBox.Image = s.Image;
}
}
Суть проблемы:
Приложение работает в трее несколько часов - при попытке его развернуть, окно разворачивается и все "зависает".
По логам видно, что до разворачивания все идет хорошо. Окно зависает полностью, включая все таймеры в нем, не реагирует на перетаскивание, закрытие, разворот во весь экран - при этом в процессах состояние приложения "Работает".
НО самое интересное, при вызове контекстного меню из иконки в трее все размораживается, причем в зависимости от времени простоя срабатывают все события, которые должны были выполнится в это время.
Например, есть таймер, вызывающий каждую секунду событие. Если вызовем меню из трея через 60 секунд после "зависания", все разморозится и событие таймера мгновенно выполнится 60 раз. Такое поведение только в скомпилированной версии приложения, если запускать из оболочки Visual Studio то такого эффекта добиться не удается, поэтому есть трудность с тем, чтобы отловить этот баг.
Что искать? В какую сторону смотреть?