У меня есть приложение, которое имеет диалоговое окно для ввода пользователем. Я хочу, чтобы этот диалог разрешался открывать только один раз в любой момент времени. Обычно я бы это сделал с помощью модального диалога, но мне нужно, чтобы пользователь мог взаимодействовать с родительской формой, пока диалог открыт. Я пытался добиться этого с помощью некоторого кода, как это:Singleton Диалог шаблон
private static Boolean dialogShown = false;
public Dialog()
{
if (!dialogShown)
{
dialogShown = true;
InitializeComponent();
}
else
{
this.Close();
}
}
private void Dialog_Closed(object sender, EventArgs e)
{
dialogShown = false;
}
Проблема с этим состоит в том, что это возможно для кода, который строит эту форму IE
public void ShowDialog()
{
Dialog dialog = new Dialog();
dialog.Show();
}
бросить исключение при попытке показать форма, которая уже закрыта. Это происходит не всегда, но легко повторяется. Итак, вопрос в том, каков правильный подход к этому, потому что мой мьютекс здесь не является надежным.
Я видел здесь несколько других подобных вопросов, но в большинстве случаев были лучшие решения для использования, чем диалог. В этом случае это должно быть немодельное одноэлементное диалоговое окно.
-Edit, я не должен был использовать Singleton, потому что это вызывало некоторую путаницу. Я предполагаю, что в этом Im Im только беспокоился о том, что в любой момент времени открывается один экземпляр этого диалога, и я не рассматриваю его как один и тот же экземпляр каждый раз. Я также не должен был использовать имя переменной Visible, потому что это тоже вводило в заблуждение. Я редактировал код, чтобы этого избежать. Извинения за вводящий в заблуждение пост ...
Почему это должно быть диалоговое окно singleton? Какова проблема, которую вы пытаетесь решить? – xxbbcc
Его пользовательский ввод для значения поиска. его единственное подходящее для одновременного открытия одного диалогового окна. Это не вызовет каких-либо проблем во время выполнения, чтобы иметь несколько диалогов, но легко для пользователя случайно открыть несколько экземпляров формы, и я хочу это предотвратить. –
Плюс почему вы используете блокировку? Во всяком случае, диалоги могут отображаться только в потоке пользовательского интерфейса. Блокировка не покупает вам ничего. – xxbbcc