2011-05-11 25 views
0

我使用Coding4Fun工具包中的MessagePrompt创建了自定义MessageBox。 当我运行ResetData_Click时出现问题。我预计启动ComplexMessage.ShowResetData_Click内的其余代码停止执行,而ComplexMessage处于打开状态。正如所发生的,它完全不同。所有的代码在一旦执行,并不要紧将在ComplexMessage因为自定义MessageBox启动时应该如何冻结父线程?

if (ComplexMessage.Result)... 

已经执行,选择什么样的用户。 我该怎么做才能使我的ComplexMessage的行为像System.Windos.MessageBox?这意味着当调用MessageBox父母的线程正在等待用户的决定。

 private void ResetData_Click(object sender, RoutedEventArgs e) 
     { 
      ComplexMessage.Show("You are about to delete all data", "Are you sure?", true); 

      if (ComplexMessage.Result) 
      { 
       DataControl.DataFileReset(); 
      } 
     } 

public class ComplexMessage 
    { 
     private static MessagePrompt messageprompt; 
     private static bool messageresult; 

     public static void Show(string message, string title, bool vibrate) 
     { 
      if (!(!(messageprompt == null) && messageprompt.IsOpen)) 
      { 
       messageprompt = new MessagePrompt 
       { 
        Title = title, 
        Message = message 
       }; 

       messageprompt.Completed += new EventHandler<PopUpEventArgs<string, PopUpResult>>(messageprompt_Completed); 
       messageprompt.IsCancelVisible = true; 
       messageprompt.Show(); 
       if (vibrate) { Tools.VibrateMessage(); } 
      } 
     } 

     static void messageprompt_Completed(object sender, PopUpEventArgs<string, PopUpResult> e) 
     { 
      if (!e.PopUpResult.Equals(PopUpResult.Cancelled)) 
      { 
       messageresult = true; 
      } 
      else 
      { 
       messageresult = false; 
      } 
      ((MessagePrompt)sender).Completed -= messageprompt_Completed; 
     } 

     public static bool Result 
     { 
      get { return messageresult; } 
     } 
    } 
+0

是否推出垃圾收集的新术语? LOL;) – 2011-05-11 16:59:02

+0

:-D对拼写错误感到抱歉! – Maku 2011-05-11 17:11:24

+0

s'ok我今天需要一个好笑。谢谢:) – 2011-05-11 17:52:22

回答

1

由于您显示来自一个click事件的消息框,你的UI线程,你不想冻结上运行。

一个选项是让ComplexMessage公开一个静态事件,它在messageprompt_Completed中触发。

然后在ResetData_Click订阅事件调用ComplexMessage.Show之前,并在事件处理程序,根据结果,调用DataControl.DataFileReset和退订。

另一种方法是重新考虑使ComplexMessage成员静态的,而是一个“行动<布尔>回调”参数传递给Show方法,你走存储在私有成员,然后调用在messageprompt_Completed回调。

+0

你是对的,我冻结UI线程以及我的ComplexMessage :)谢谢你的建议。我会尽力去做,并与结果分享。如果你不介意,我会把这个问题留待一段时间。也许有人会为我的问题找到一些出色的解决方案。 – Maku 2011-05-11 20:32:11

相关问题