我当前正在尝试在用户发送消息或取消后,在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使用更合理的不同方法
我推荐第二种选择。可能使用两个不同的按钮或菜单选项来进行这两项操作。