1

我目前正在尝试MFMailComposeViewController在 SMS 一 ( 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);
}
4

1 回答 1

2

PresentModalViewController当另一个呼叫DismissModalViewController正在进行时,您不能再次呼叫。(如果您尝试这样做,控制台可能会出现错误。)

所以你的选择是:

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

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

于 2012-08-30T12:24:25.853 回答