5

編集: Windows Phone ではHttpWebRequest.BeginGetResponse、私が開始した別のスレッドで呼び出しています。次に、MessageBox.Show() を呼び出します。問題は、MessageBox を閉じるまでコールバックが呼び出されないことです。

void GetResponseCallback(IAsyncResult asynchronousResult) {
    //Not getting called until I dismiss MessageBox
}

void getWeb() {
    Thread.Sleep(1000);
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri(url));
    request.Method = "GET";
    request.BeginGetResponse(new AsyncCallback(GetResponseCallback), request);
}

new Thread(getWeb).Start(); //Start a new thread
MessageBox.Show();

MessageBox はバックグラウンド スレッドでコールバックをブロックする必要がありますか?

4

3 に答える 3

0

"MessageBox.Show();" あなたのUIスレッドをブロックします。

しかし、それが GetResponseCallback が実行されない理由だとは思いません。

あなたはそれをテストすることができます、そのコードにコメントしてください。

于 2012-10-15T08:43:54.230 に答える
0

への参照を追加する必要がありますMicrosoft.Phone.Reactive

これを試して:

private void PushMe_Click(object sender, RoutedEventArgs e)
        {
            var scheduler = Scheduler.NewThread;
            scheduler.Schedule(action => GetWeb());         
            MessageBox.Show("This is a test.", "Test caption.", MessageBoxButton.OK);
        }

        private void GetWeb()
        {
            Thread.Sleep(3000);
            var httpWebRequest = (HttpWebRequest) WebRequest.Create("http://www.stackoverflow.com");
            httpWebRequest.Method = "GET";

            httpWebRequest.BeginGetResponse(BeginGetResponseCallback, httpWebRequest);
        }

        private void BeginGetResponseCallback(IAsyncResult ar)
        {

        }
于 2012-10-12T15:44:25.410 に答える
0

使用したい場合MessageBox.Show();

次に、this inside ディスパッチャを配置します

void GetResponseCallback(IAsyncResult asynchronousResult) 
{
    Dispatcher.BeginInvoke(() =>
    {
        MessageBox.Show("Done");
    });

}

void getWeb() {
    Thread.Sleep(1000);
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri(url));
    request.Method = "GET";
    request.BeginGetResponse(new AsyncCallback(GetResponseCallback), request);
}

new Thread(getWeb).Start(); //Start a new thread
于 2013-07-18T09:06:09.967 に答える