做的是同一件事情,timer本身就是实时去检测并刷新listView数据源的,socket无非是在接受到消息时刷新而已不是实时检测,你为什么要创建线程去刷新,每次接收到消息创建一个线程,用完之后又得销毁,之后收到消息又得重复同样的创建-销毁,浪费资源不说,还那么麻烦,你为什么不把刷新数据源封装成一个公共方法,timer里调用,当socket接收到消息时再调用即可,都可执行又不冲突~
程序退出的方法:this.Close() 只是关闭当前窗口,若不是主窗体的话,是无法退出程序的,另外若有托管线程(非主线程),也无法干净地退出;Application.Exit() 强制所有消息中止,退出所有的窗体,但是若有托管线程(非主线程),也无法干净地退出;Application.ExitThread()强制中止调用线程上的所有消息,同样面临其它线程无法正确退出的问题;System.Environment.Exit(0) 这是最彻底的退出方式,不管什么线程都被强制退出,把程序结束的很干净。如楼上所示,直接在按钮的单击事件中写this.Close()就可以关闭窗体,同时相应的进程会自动关闭,不需要你自己处理。如果你是需要关闭进程的代码,则如下:先确定你的进程 Process[] plist = Process.GetProcessesByName("这里输入你的窗体名称")
Process p = plist[0]
结束进程的方式: p.Kill() 就可以强制关掉进程。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)