0

私のデスクトップ .NET 3.5 アプリケーションはWebRequest.BeginGetResponse、長いポーリングを実装するために使用される要求を発行するために使用します。通常、このリクエストの処理には 10 秒以上かかります。問題はBeginGetResponse、スレッド プールで要求が完了するのを待機することです。使用するカスタム スレッドまたはカスタム スレッドを指定する方法はありますBeginGetResponseか?

別の方法として、同期リクエストを実行する独自のスレッドを使用することもできますWebRequest.GetResponse(うまくいけば、これは.NET 3.5では実際に同期であり、 .NET 1.0 ではそうではありませんでした)。同期リクエストを中止する明確な方法がないため、アプリケーションを終了する必要があります。

4

1 に答える 1

1

WPF を使用しているか、Windows フォームを使用しているかはわかりません。WPF の例を次に示します。

        WebRequest w = HttpWebRequest.Create("http://www.google.com");

        Dispatcher dispatcher = Dispatcher.CurrentDispatcher;

        Thread thread = new Thread(new ThreadStart(() =>
            {
                WebResponse response = w.GetResponse();
                dispatcher.BeginInvoke(new Action(() =>
                {

                    // Handle response on the dispatcher thread.

                }), null);
            }));

        thread.IsBackground = true;
        thread.Start();

IsBackground = true に注意してください。したがって、アプリケーションは終了時に終了します。スレッド メソッド内に HttpWebRequest.Create を配置することもできます。

Windows.Form と同等

        WebRequest w = HttpWebRequest.Create("http://www.google.com");

        Thread thread = new Thread(new ThreadStart(() =>
            {
                WebResponse response = w.GetResponse();
                this.BeginInvoke(new Action(() =>
                {

                    // Handle response on the dispatcher thread.

                }), null);
            }));

        thread.IsBackground = true;
        thread.Start();

これがフォーム/コントロールの場所

于 2013-08-08T13:30:12.957 に答える