2011-05-17 95 views
0

我在写一个Web应用程序,允许用户通过http web请求下载大文件。我需要给他们取消请求的选项,所以我为请求创建了一个线程。但是,在下载过程中,我仍然无法启动取消活动。我究竟做错了什么? 感谢您的任何意见!线程以允许取消Web请求

public class downloadThread { 
      public int isResume; 
      public void downloadImage() 
      { } 
     } 
      protected void btnDownload_Click(object sender, EventArgs e) 
      {  var x = new downloadThread(); 
        x.isResume = 0; 

        tRequest = new Thread(new ThreadStart(x.downloadImage)); 
        tRequest.Start(); 
        while (tRequest.IsAlive) 
        { 
         DownloadImage(); //this is where the rest request happens 
        } } 
      protected void btnCancelRequest_Click(object sender, EventArgs e) 
      { 
       if (tRequest != null && tRequest.IsAlive) 
       { 

        tRequest.Abort(); 

       } 
      } 
+0

心不是这里面btnDownload_Click while循环阻塞,即使您正在使用的线程调用?而tRequest线程处于活动状态(文件下载)正在执行DownloadImage()这样bcoz那btnCancelRequest_Click不点火也许 – DSharper 2011-05-17 03:41:31

回答

2

用thread.Abort中止一个线程可能不是你想要做到这一点的方式。

如何在你的DownloadImage方法,而不是一个异步Web请求? (见http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.begingetresponse.aspx)。这样,您可以调用Web请求的.Abort方法,而不是中止该线程。

+0

好了,我把你的想法,并试图将其应用到我的下载文件部分。下载发生在块中,所以我需要循环。 这是我拥有的: – user756678 2011-05-20 03:21:13