//上传照片
private void btnSave_Click(object sender, EventArgs e)
{
try
{
SysInfo si = new SysInfo();
this.statusBar1.Text = Status.PicSave;
threadwcf = new Thread(new ThreadStart(wcfrun));//上传照片线程
threadtime = new Thread(new ThreadStart(timerun));//计时线程
threadwcf.IsBackground = true;
threadwcf.Start();
threadtime.Start();
}
catch
{
this.statusBar1.Text = Status.wlanFail;
}
}
private void wcfrun()
{
try
{
FTPClient d = new FTPClient(FtpInfo.ip, FtpInfo.ml, FtpInfo.yhm, FtpInfo.mm, FtpInfo.dk);
d.upload(Path.TemporaryPath, "*");
if (InvokeRequired)
{
Invoke(new NewWcf(enduploadpic));
}
}
catch (Exception ex)
{
this.statusBar1.Text = Status.wlanFail;
}
}
//如果超过2秒,则结束上传照片线程
private void timerun()
{
for (var i = 1; i < 10; i++)
{
if (i > 2)
{
if (InvokeRequired)
{
Invoke(new NewWcf(alldrefresh));
}
return;
}
Thread.Sleep(1000);
}
}
//这边会出问题
private void alldrefresh()
{
//当超过两秒的时候,结束线程报错了
//ThreadAbortException
//这边貌似结束了线程,程序会关闭,怎么能不关闭程序呢?
threadwcf.Abort();
this.statusBar1.Text = Status.wlanTimeOut;
}
private void enduploadpic()
{
picCount.Clear();
this.statusBar1.Text = Status.endSave;
threadtime.Abort();
Application.DoEvents();
}
11 个解决方案
#1
米人吗?@斑竹,看看嘛
#2
把 threadwcf.Abort();
去掉就可以了,
随后的return就结束线程循环了,不用特意.Abort()
去掉就可以了,
随后的return就结束线程循环了,不用特意.Abort()
#3
Abort强行终止一个线程
#4
alldrefresh方法里加个try catch
#5
主要是因为有些时候,如果不结束这个线程,用户会继续上传图片,这样系统就有两个相同线程了,会报“Control.Invoke 必须用于与在独立线程上创建的控件交互。”这个错误
#6
你后面不是return了吗?return就结束了线程,所以你这里的.Abort是多此一举
#7
Abort(); 一定抛异常
#8
我return了,然后连续按两次上传图片按钮,报:Control.Invoke 必须用于与在独立线程上创建的控件交互。
主要是这边出现了无线信号不好的情况,有些地方上传速度特慢,程序不能在那傻等,就想上传图片超过一定时间就自动终止,但又不能影响用户其他操作
主要是这边出现了无线信号不好的情况,有些地方上传速度特慢,程序不能在那傻等,就想上传图片超过一定时间就自动终止,但又不能影响用户其他操作
#9
用Abort方法强行终止一个线程容易引发ThreadAbortException异常,catch处添加调用Thread.ResetAbort来取消中止,Abort()下方添加Thread.Join 方法,直到线程实际停止执行时才返回。
#10
报错后会退出程序,汗
#11
用其他方式解决了
#1
米人吗?@斑竹,看看嘛
#2
把 threadwcf.Abort();
去掉就可以了,
随后的return就结束线程循环了,不用特意.Abort()
去掉就可以了,
随后的return就结束线程循环了,不用特意.Abort()
#3
Abort强行终止一个线程
#4
alldrefresh方法里加个try catch
#5
主要是因为有些时候,如果不结束这个线程,用户会继续上传图片,这样系统就有两个相同线程了,会报“Control.Invoke 必须用于与在独立线程上创建的控件交互。”这个错误
#6
你后面不是return了吗?return就结束了线程,所以你这里的.Abort是多此一举
#7
Abort(); 一定抛异常
#8
我return了,然后连续按两次上传图片按钮,报:Control.Invoke 必须用于与在独立线程上创建的控件交互。
主要是这边出现了无线信号不好的情况,有些地方上传速度特慢,程序不能在那傻等,就想上传图片超过一定时间就自动终止,但又不能影响用户其他操作
主要是这边出现了无线信号不好的情况,有些地方上传速度特慢,程序不能在那傻等,就想上传图片超过一定时间就自动终止,但又不能影响用户其他操作
#9
用Abort方法强行终止一个线程容易引发ThreadAbortException异常,catch处添加调用Thread.ResetAbort来取消中止,Abort()下方添加Thread.Join 方法,直到线程实际停止执行时才返回。
#10
报错后会退出程序,汗
#11
用其他方式解决了