内螺纹在 ASP.Net 中不工作

本文关键字:工作 Net ASP | 更新日期: 2023-09-27 18:24:16

Thread nwthread = new Thread(() =>
{
    try
    {
        string srch = "http://www.thesaurus.com/browse/" + keyword;
        using (WebClient  webpage = new WebClient())
        {
           // webpage.Headers[HttpRequestHeader.UserAgent] = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2";
            webpage.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");
          Session["dwnld"]=  downloadedString = webpage.DownloadString(srch);
        }
        //downloadedString = client.DownloadString(srch);
    }
    catch (WebException w)
    {
        //Response.Write("<script>alert('Invalid Operation..!')</script>");
        string fpath2 = Server.MapPath(@"~/Ex_Contents/" + _file[0] + "/");
        if (File.Exists(fpath2))
        {
            string[] exfiles1 = Directory.GetFiles(fpath2);
            foreach (string file1 in exfiles1)
            {
                File.Delete(file1);
            }
            return;
        }
    }
});
nwthread.Start();

上面提到的代码位于页面的主 UI 线程.aspx。但是如果不设置断点,它就无法正常工作。我已经将 Web 内容提取放在线程中,因为它花费了太多时间。因此,会话变量也没有获得任何值。

请给出解决方案

内螺纹在 ASP.Net 中不工作

ASP.NET 应用程序是一个处理请求的应用程序。UI 由浏览器绘制。因此,ASP.NET 应用程序中没有 UI 线程。

IIS 为每个处理请求提供线程池中的单独线程。这意味着在 ASP.NET 中,您可以执行任何代码,而不必担心它的资源消耗程度。

只需删除您的Thread用法并在当前线程:)中执行相同的代码

好吧,由于您不再在请求线程上,因此无法再访问请求资源!

这包括对SessionServer的使用 - 两者都与当前请求上下文相关联。输入断点时,发生的最重要的事情是在单步执行"工作线程">代码时冻结请求线程 - 因此请求上下文比帮助程序线程存活的时间更长。请求线程完成后,请求结束,响应已经发送 - 无法更改此设置。HTTP是一个非常简单的请求>响应模型,没有"哦,等等,我上次忘记发送一条信息"的地方。

我认为你在这里采取了完全错误的方法。没有理由必须在单个请求中执行所有操作 - 这就是 AJAX 和 IFrame 之类的用途。这是一个单独的异步请求 - 为什么不将其设置为单独的请求?