오세현 (프레이) Ответов: 2

C# как остановить выполнение до тех пор, пока не будет нажата кнопка окна сообщения


Моя программа ловит событие msg из моего файла .dll.
Затем он показывает MessageBox. Затем выйдите из программы.
Однако вы можете игнорировать кнопку MessageBox и продолжать использовать программу.
Поэтому я хочу отключить программу до тех пор, пока не нажму кнопку ОК.
Я хотел бы отключить эту программу.

Что я уже пробовал:

private void ExitProgram(object sender, EventArgs e)
        {
            string msg = sender as string;
            Log.Instance.InsertLogError(msg);

            DateTime nowTime = DateTime.Now;

            while (Log.Instance.GetLogQueueCount() != 0 || nowTime.AddSeconds(10) < DateTime.Now)
            {
                Thread.Sleep(100);
            }
            Log.Instance.Dispose();

            MyProgramtWindowsModeErr(msg);
            //if (Program.bWindowMode == true)
            //    MessageBox.Show(msg, "MyProgram", MessageBoxButtons.OK, MessageBoxIcon.Error);

            (Process.GetCurrentProcess()).Kill();
        }


        public bool MyProgramtWindowsModeErr(string msg)
        {
            if (Program.bWindowMode == true)
            {
                MessageBox.Show(msg, "MyProgram", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return false;
            }
            return true;
        }


В MyProgramtWindowsModeErr я проверил true и fasle друг для друга.

Однако я не мог открыть окно сообщения или продолжить использование программы.
Помогите мне, пожалуйста..

Richard MacCutchan

Ящик для сообщений.Шоу действительно отключает программу до тех пор, пока на нее не ответят. Ваш код должен делать что-то другое.

Richard MacCutchan

Ваш код, по-видимому, зацикливается внутри while (Log.Instance.GetLogQueueCount() != 0 || nowTime.AddSeconds(10) < DateTime.Now) заявление;

2 Ответов

Рейтинг:
19

#realJSOP

Все, что вам нужно сделать, это отобразить модальное диалоговое окно, и выполнение будет приостановлено до тех пор, пока вы не закроете диалоговое окно. Так уж получилось, что MessageBox *является* модальным. Конечно, я предполагаю, что вы не запускаете никаких асинхронных процессов или иным образом запускаете несколько потоков.


Рейтинг:
11

Kanan Gandhi

public bool MyProgramtWindowsModeErr(string msg)
        {
            if (Program.bWindowMode == true)
            {
                if (DialogResult.OK == MessageBox.Show(msg, "MyProgram", MessageBoxButtons.OK, MessageBoxIcon.Error))
                {
                    return false;
                }
            }
            return true;
        }