Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.08.2011, 13:02   #1
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию Синхронизация с формой

В моей форме есть такая функция:

Код:
// Обновить заголовок окна
void UpdateTitle ()
{
	string text;
	// Формирую строку
	// ...

	if (this.InvokeRequired)
		Invoke ((Action)delegate // Thread safe
		{
			this.Text = text;
		});
	else
		Text = text;
}
Бывает ситуация, когда форма уже закрывается, и в этот момент вызывается моя функция - возникает ошибка обращения к Text. Я добавил if (Disposing) return; и вероятность ошибки уменьшилась, но возможна ситуация, когда форма начинает финализироваться после этой проверки, но до изменения заголовка - так один раз и случилось. Можно вместо синхронизации просто отлавливать исключения. Но мне интересно - можно ли здесь сделать нормальную синхронизацию?
ds.Dante вне форума Ответить с цитированием
Старый 04.08.2011, 18:16   #2
Genco
Пользователь
 
Аватар для Genco
 
Регистрация: 16.11.2010
Сообщений: 46
По умолчанию

Я мб глупость скажу, но простой
Код:
lock (this) { /*делаем дело*/}
не должен ли помочь? Сборщик мусора это другой поток в принципе, чем не синхронизация. При желании можно нечто посложнее в плане синхронизации приделать (мьютекс, монитор...), просто ради одного заголовка как-то громоздко получается.
Бложегов не имею, но найти меня можно в уютном междусобойчике тут: http://coverduck.ru
"Форум программистов, анархистов, анонимусов и просто любителей с интересом пообщаться"
Genco вне форума Ответить с цитированием
Старый 05.08.2011, 10:17   #3
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию

Не рекомендуется блокировать this. http://msdn.microsoft.com/ru-ru/library/c5kehkcz.aspx
Можно попробовать расставить lock (myLock) везде, где возможно уничтожение окна. Но хотелось бы именно не слишком громоздко.
ds.Dante вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Синхронизация с БД maryan.vetrov Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate) 1 25.02.2011 14:19
Синхронизация kostyan142 Общие вопросы по Java, Java SE, Kotlin 6 13.01.2010 01:39
Синхронизация скролбара nusik Общие вопросы Delphi 6 11.09.2009 14:54
Синхронизация yarilo Софт 2 07.08.2009 15:50