我正在尝试在用户发送消息或取消之后,在SMS(MFMailComposeViewController
)之后显示电子邮件视图(MFMessageComposeViewController
)..
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);
}
答案 0 :(得分:2)
当PresentModalViewController
的另一个呼叫正在进行时,您无法再次拨打DismissModalViewController
。 (如果您尝试这样做,可能会向控制台显示错误。)
所以你的选择是:
我会推荐第二个选项。也许为这两个操作使用两个不同的按钮或菜单选项。