Вот ситуация:
Я разрабатываю простое приложение со следующей структурой:
- FormMain (точка запуска)
- FormNotification
- CompleFunctions
правый
Ну, в FormMain У меня есть следующая функция:
private void DoItInNewThread(ParameterizedThreadStart pParameterizedThreadStart, object pParameters, ThreadPriority pThreadPriority)
{
Thread oThread = new Thread(pParameterizedThreadStart);
oThread.CurrentUICulture = Settings.Instance.Language;
oThread.IsBackground = true;
oThread.Priority = pThreadPriority;
oThread.Name = "μRemote: Background operation";
oThread.Start(pParameters);
}
Итак, каждый раз, когда мне нужно вызвать трудоемкий метод, расположенный в ComplexFunctions , я делаю следующее:
// This is FormMain.cs
string strSomeParameter = "lala";
DoItInNewThread(new ParameterizedThreadStart(ComplexFunctions.DoSomething), strSomeParameter, ThreadPriority.Normal);
Другой класс, FormNotification, это форма, которая отображает некоторую информацию о процессе для пользователя.
Это FormNotification может быть вызвано из FormMain или ComplexFunctions.
Пример: * 1 023 *
// This is ComplexFunctions.cs
public void DoSomething(string pSomeParameter)
{
// Imagine some time consuming task
FormNotification formNotif = new FormNotification();
formNotif.Notify();
}
FormNotify имеет таймер, поэтому через 10 секунд форма закрывается. Я не использую formNotif.ShowDialog, потому что я не хочу уделять внимание этой форме.
Вы можете проверить эту ссылку , чтобы увидеть, что я делаю в уведомлении.
Хорошо, вот проблема:
Когда я вызываю FormNotify из ComplexFunction , которая вызывается из другого потока в FormMain ... это FormNotify исчезает через несколько миллисекунд.
Это тот же эффект, что когда вы делаете что-то вроде этого:
using(FormSomething formSomething = new FormSomething)
{
formSomething.Show();
}
Как этого избежать?
Это возможные решения, которые я не хочу использовать:
- Использование Thread.Sleep (10000) в FormNotify
- Использование FormNotif.ShowDialog ()
Это упрощенный сценарий (FormNotify делает некоторые другие интересные вещи, которые просто остаются на 10 секунд, но они не имеют отношения к проблеме).
Спасибо за ваше время !!!
И, пожалуйста, извините, мой английский.