none
请教一个关于类和线程关系的问题 RRS feed

  • 问题

  • 我新建了一个telnet类,每用new新建一个telnet类并启动connet(IP,port)方法后,类会启动一个后台线程,此线程中用do...loop 语句来查看服务器是否有字节传送过来,如果有数据就对数据进行处理,直到我将telnet类的exitthread字段设置为true,类就会退出do...loop并关闭这个线程.

    但实际运行中我遇到一个问题,如果我在button_clik事件中,调用了以下语句后
    dim a as new telnet
    telnet.connet(ip,port)
    每按一次button就会启动一个线程.按10次就会有10个线程,当我将exitthread设置为true只能退出一个线程,其他的线程都退不出来.
    我该怎么解决这个问题啊.代码的设计思路到底有什么问题啊.

    vb.net中如果新建一个类,这个类会启动一个线程,这个线程和这个类存不存在一个父子关系啊.还是说类和线程是并行处理的.

    2009年9月9日 13:18

答案

  • 你好!
         这是两个独立的概念,在类中启动一个线程,这个线程和这个类没有什么归属关系。但是你的这个exitthread是属于类的实例的,你每次都创建新的实例,这些不同实例的exitthread字段彼此是独立的,你只设置某个实例的exitthread为true,而其他实例的exitthread还是false!
         解决方法很简单,你把exitthread定义成Shared就可以了!这样exitthread属于这个类,在类的各个实例间共享!
    周雪峰
    2009年9月10日 4:37
    版主

全部回复

  • 最好有完整的代码  压缩包更好
    还是说类和线程是并行处理的 =〉yes

    恭喜自己5星用户达成
    2009年9月10日 4:21
  • 你好!
         这是两个独立的概念,在类中启动一个线程,这个线程和这个类没有什么归属关系。但是你的这个exitthread是属于类的实例的,你每次都创建新的实例,这些不同实例的exitthread字段彼此是独立的,你只设置某个实例的exitthread为true,而其他实例的exitthread还是false!
         解决方法很简单,你把exitthread定义成Shared就可以了!这样exitthread属于这个类,在类的各个实例间共享!
    周雪峰
    2009年9月10日 4:37
    版主