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);
}

1MFMailComposeViewControllerつはそれほど違いはありません。私はこのメソッドをそのように呼びます: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が進行中の間は、への2番目の呼び出しを行うことはできません。(これを行おうとすると、コンソールにエラーが表示される可能性があります。)

したがって、オプションは次のとおりです。

  • タイマーを使用して、2番目のモーダルビューコントローラーを表示します
  • より理にかなっているUIへの別のアプローチを使用する

2番目のオプションをお勧めします。たぶん、2つの操作に2つの異なるボタンまたはメニューオプションを使用します。

于 2012-08-30T12:24:25.853 に答える