Re[6]: Проблемы с многопоточностью
От: Tyoma Developer Россия  
Дата: 24.09.07 04:43
Оценка:
Не думал, что мой вопрос вызовет такое бурное обсуждение. Но всё же, не понимаю почему некоторые считают, что использование диалоговых окон в потоках, это признак неверного проектирования. Могу просто кратко обрисовать задачу:

Есть некоторое приложение у которого есть функция автоматического update-а (скачивание новой версии). Когда приложение запускается, оно проверяет наличие новой версии в нэте и если таковое обнаруживается, то появляется MessageBox с вопросом: "Не хотите ли обновить". Так вот эту проверку с диалогом я хочу запустить в отдельном потоке, т.к. не всегда эта проверка проходит быстро, а я не хочу чтобы она тормозила работу приложения

Буду рад если кто-нить подскажет иной путь решения этой проблемы. Насчёт Invoke, я его и юзаю, но вы просто наверно не представляете проблемы


public static void CheckForUpdate(bool ShowMessage) {
  ...
  // Вот тут мне нужно получить ссылку на главную форму, но т.к. этот метод запушен в другом потоке....
  // Может я зря это делаю, но пока не нашёл другого решения
  if (MessageBox.Show(!!!Pointer HERE!!!, "New version of " + System.Windows.Forms.Application.ProductName + " is available" +
                                      "\r\n Do you want to download and update it?",
                                      "New version is available",
              MessageBoxButtons.YesNo,
              MessageBoxIcon.Question) == DialogResult.Yes) {
  ...
  }
}

// вот что-то типа такого я делаю ---------------------------------------
private void FormMain_Load(object sender, EventArgs e) {
  m_CheckForUpdateThread = new Thread(new ThreadStart(CheckForUpdate));
  m_CheckForUpdateThread.Start();
}

public void GetFormMainPtr(ref FormMain FormMainPtr) {
  if (this.InvokeRequired) {
    GetFormMainPtrCallback callback = new GetFormMainPtrCallback(GetFormMainPtr);
    this.Invoke(callback, new object[] {FormMainPtr});
  }
  else {
    FormMainPtr = this;
  }
}
//Но это естественно не работает -----------------------------------------


Автору предыдущего ответа
Я конешно понимаю вас но хочу сказать, что иногда лучше самому в чём-то покапаться, чём требовать сразу готовенькое. Так ничему не научишся.
Temet nosce
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.