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 回答