MonoTouch:连续视图



我当前正在尝试在用户发送消息或取消后,在SMS视图(MFMessageComposeViewController)之后显示电子邮件视图(MFMailComposeViewController)。。

MFMessageComposeViewController已正确关闭,但MFMailComposeViewController未显示。

我搜索了线程InvokeInMainThread,但它没有显示,或者不在主线程中。老实说,我根本不知道线程,而且我读到的文档也不清楚。

显示MFMessageComposeViewController:的方法

private void SendSms ()
{
    string strMessage = MessageComposer.GetMessage(isEmergency, latitude, longitude, location);
    MFMessageComposeViewController message = Sender.SendSms(strMessage, AppDelegate.contacts);
        message.Finished += delegate {
        message.DismissModalViewControllerAnimated(true);
    };
    this.NavigationController.PresentModalViewController (message, true);
}

MFMailComposeViewController没有太大区别。我这样称呼这个方法:InvokeOnMainThread(delegate { SendSms(); });,效果非常好。

我的糟糕是当这一切结束的时候。我尝试了ThreadPool.QueueUserWorkItem(new WaitCallback(new Object(), SendEmail));,但它不在主线程中。

我试过了:

SendDelegate d = new SendDelegate(SendSms);
AsyncCallback callBack = new AsyncCallback(SendEmail);
IAsyncResult ar = d.BeginInvoke(new Object(), callBack, null);

不在主线程中。

编辑:解决方案代码

以下是它的解决方法!我应该考虑一下。。。

MFMessageComposeViewController message = new MFMessageComposeViewController();
message.Finished += delegate {
    message.DismissModalViewControllerAnimated(true);
        ThreadPool.QueueUserWorkItem ((e) => {
                        Thread.Sleep(500);
                        InvokeOnMainThread (delegate { 
                SendEmail(); 
                        });
                });
    };
    this.NavigationController.PresentModalViewController (message, true);
}

在对DismissModalViewController进行另一次调用时,不能对PresentModalViewController进行第二次调用。(如果您尝试这样做,控制台可能会出现错误。)

所以你的选择是:

  • 使用计时器显示第二个模式视图控制器
  • 对UI使用更合理的不同方法

我推荐第二种选择。可能使用两个不同的按钮或菜单选项来进行这两项操作。

最新更新