我有个函数download();
每按一次button就会用一个线程执行download函数;
假设现在有两个线程执行download函数,会不会有问题(download函数是从远程服务器下载文件)?如果我想在其他函数里面停止线程1的执行(让其sleep),应该要怎么做?

解决方案 »

  1.   

    两个线程中都单独创建下载组件比如(weblient),不要共用
      

  2.   


    ls,这个只是应用程序,没有web,用Tcp协议
      

  3.   

    sleep只能本线程执行
    你在B线程中无法让A线程直接执行sleep
      

  4.   

    1.在你的线程子程序开始处加一个,已经执行的标记=TRUE,在该子程序结尾加一个=FALSE的标记,
    在新调用线程时,先判定这个标记,=TRUE 则做个循环等待,只到找到,另一个线程已经停止的标记,
    这时循环结束,启动新线程。 --要记得这个标记设成全局变量,以便各线程可以读到。
    2.在新线程中使用异步委托调用,可以停止老线程或使其SLEEP , 你想这样,就查“异步委托调用”
      

  5.   


    private void SerialPort_bytes(System.Object SerialPort_Name, System.EventArgs e)
    {
    jsclbz = true;
    //处理中标志,发现此标志跳出, =true  不进入!--异步调用是需要用此
    try {
    //........程序段
    } catch {
    }
    jsclbz = false;
    //出错或正常出口都有此标志  --异步调用是需要用此
    }//调用办法如下{
    do {
    System.Windows.Forms.Application.DoEvents();
    //释放控制权给程序的其他事件
    System.Threading.Thread.Sleep(0);
    } while (!(jsclbz == false));
    //等待到  '在处理中标志,发现此标志等待
    BeginInvoke(new EventHandler(SerialPort_bytes_Receive), "");
    //异步调用, 不传参数时用""替,传参数可以用单参数或类替代(多参数)
    }
      

  6.   

    给个例子。就像chrome一样,可以同时现在多个文件,你想停止那个都可以的。
       我就想问这个是怎么实现的~我的想法是每次要想要download的时候,可以线程执行这个downlaod函数,如何是这么样,怎么让用户可以随便停止其中一个下载线程呢?
      

  7.   

    你的规划就有问题啊
    每个下载就要开一个线程?
    完全没必要吧
    所有的下载用一个线程就可以了
    又不是很耗费cpu资源的
    能少用线程就尽量少用下载不就是一个循环么?
    跳出这个循环就终止了下载了你建立一个下载队列,要停哪个就把它从队列里移出去好了。
      

  8.   

    就算你一定要开多线程,也很简单用伪代码while(needDownload && notEndFile)
    {
       如果有下载数据则读入到缓冲区
          从缓冲区读取数据写入到磁盘
       thread.sleep(50);   
    }
    当你想终止下载的时候,设置needDownload为false就停止下载了
      

  9.   

    [Quote=引用 11 楼 charmingalgoman 的回复:]你的规划就有问题啊
    每个下载就要开一个线程?
    完全没必要吧
    所有的下载用一个线程就可以了
    又不是很耗费cpu资源的
    能少用线程就尽量少用下载不就是一个循环么?
    跳出这个循环就终止了下载了这个求指教,可以有伪代码参考一下么?我没有思路。还有如果是多个多线程的话,要区分哪个线程要终止我觉得很难实现