MonoTouch:连续观看

时间:2012-08-29 12:52:41

标签: ios multithreading xamarin.ios mfmailcomposeviewcontroller mfmessagecomposeview

我正在尝试在用户发送消息或取消之后,在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);
}

1 个答案:

答案 0 :(得分:2)

PresentModalViewController的另一个呼叫正在进行时,您无法再次拨打DismissModalViewController。 (如果您尝试这样做,可能会向控制台显示错误。)

所以你的选择是:

  • 使用计时器显示第二个模态视图控制器
  • 对UI使用不同的方法更有意义

我会推荐第二个选项。也许为这两个操作使用两个不同的按钮或菜单选项。