日期:2014-05-19  浏览次数:20762 次

关于线程的问题C# Windows应用程序
我的程序实现的是每隔10秒就调用TCP连接,向服务器获取数据,这个功能的完成我用到了private   System.Windows.Forms.Timer   timer;控件.在timer的timer_Tick事件里我调用了一个线程:
ThreadStart   workerStart=new   ThreadStart(run);
Thread   workerThread=new   Thread(workerStart);
workerThread.Start();
函数viod   run():是完成TCP连接服务器获取数据的.
我的问题:当TCP连接出现异常(异常的可能性:服务器关闭),我想要关掉workerThread线程,程序会自动的不断与服务器连接,当连接成功后,这个线程又再次的启动,请问各位大侠,这个功能我该怎么去完成呢?请赐教,小弟新手,请多多谅解!
问题解决马上散分!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

------解决方案--------------------
貌似比较难!


多线程操作TCP...异常多~
------解决方案--------------------

try
catch()
捕获操作啊
------解决方案--------------------
你现在的做法是不是有代码负责去完成TCP的连接,然后有一个线程利用这个TCP连接去执行操作?这样做是不对的。

TCP网络资源应该用的时候去连接,不用的时候立即释放。

你把建立TCP连接的操作放在循环的线程中,然后不用Timer,用循环,在循环中判断和上次执行之间的TimeSpan,剩下的就是判断连接是否已经完成,如果没完成TCP连接就不执行延时,即可。
------解决方案--------------------
这种程序测试非常麻烦。
------解决方案--------------------
我是这样做的:
//子线程
bool ISOK = false;
while (!ISOK)
{
try
{
//TcpConnect.Connect();
//...
//TcpConnect.Close();
ISOK = true;
}
catch
{
Thread.Sleep(30000);30秒后重试
}
finally
{
TcpConnect.Close();
}
}
------解决方案--------------------
出现异常要关闭。则直接在run中return即退出线程。

至于“程序会自动的不断与服务器连接,当连接成功后,这个线程又再次的启动”
不是很明白楼主所指的是什么?

如果有一个线程专门负责连接服务器,当它连成功后,可以使用事件.如:AutoEventHandle等通知别一个线程(此线程可以一直处于等待状态)运行。
------解决方案--------------------
定时多次连接绝对不能在timer里面做的
开个线程 控制连接的次数和延时 连接失败 就释放等待
如果你想一直连接只到成功 就用loop
取得数据后 等待10秒 再取数据 不需要再连接了把
如果失败 自己再作处理 是退出还是再连接等
------解决方案--------------------
tasada 的方法就很好,可以把isok换成次数判断,控制连接的尝试次数
------解决方案--------------------
用.NET REMOTING 吧