WPF Call MessageBox.Show asinxron

Menda taymerga ega bo'lgan ob'ekt bor va u taymer 5 daqiqaga yetganda voqeani chiqaradi. Bunday holda, men MainWindow.xaml.cs-da MessageBox.Show("Nimadir") ni chaqiraman.

Muammo shundaki, men MessageBox.Show() ga qo'ng'iroq qilganimda, foydalanuvchi "OK" tugmasini bosmaguncha taymer to'xtaydi. Agar foydalanuvchi "OK" tugmasini bosmagan bo'lsa ham, menga taymer kerak. Buni qilishning yaxshi va oqlangan usuli bormi? Men hozirgacha sinab ko'rgan narsam (lekin ishlamadi):

        private void OnAlert(object sender, MvpEventArgs e)
        {
            this.Dispatcher.Invoke(
                System.Windows.Threading.DispatcherPriority.Normal,
                new Action(
                  delegate()
                  {
                      MessageBox.Show("Alert");
                  }
              ));
        }

person Carlo    schedule 27.07.2009    source manba


Javoblar (3)


Siz qanday taymerdan foydalanasiz? DispatchTimer-ni sinab ko'ring. Bu to'xtab qolishi mantiqqa to'g'ri kelmaydi. Siz narsalar haqida aniq bo'lishingiz kerak bo'lishi mumkin (tugallangan ishlov beruvchidan yana .Start() ga qo'ng'iroq qiling, lekin DispatchTimer avtomatik ravishda qayta tiklanadi).

http://msdn.microsoft.com/en-us/library/system.windows.threading.dispatchertimer.aspx

DispatchTimer bilan oladigan yana bir narsa shundaki, bu Tick hodisasi Dispatch navbatida avtomatik ravishda baholanadi, shuning uchun uni Dispatch navbatiga aniq qo'yish shart emas... shunchaki MessageBox.Show ga qo'ng'iroq qiling. :)

Bundan tashqari... qilayotgan ishingiz dahshatli tuyuladi... Umid qilamanki, MessageBox.Show sizning kontseptsiyangizning isbotidir va siz uni SomethingBetterAndNotSoAnnoyingAndModal.Show() bilan almashtirmoqchisiz, lekin bu sizning savolingizga foydali emas, shunchaki kuzatish.

person Anderson Imes    schedule 27.07.2009

BeginInvoke-dan foydalanib, xabarlar oynasiga asinxron qo'ng'iroq qilishingiz mumkin. Men buni yaqinda qildim va bu haqda blog yozdim: http://www.dmcinfo.com/blog.aspx/articleType/ArticleView/articleId/163/Asynchronous-Message-Box-in-WPF.aspx. Umid qilamanki, bu yordam beradi.

person Eric Anderson    schedule 09.03.2010

Men uni nafis deb atamagan bo'lardim, lekin siz xabarlar qutisi sifatida foydalanish uchun o'z oynangizni yaratishingiz va uni "ShowDialog" o'rniga "Show" bilan chaqirishingiz mumkin.

person jvanderh    schedule 27.07.2009