博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c# 上传excel数据总结(一)线程的使用
阅读量:6592 次
发布时间:2019-06-24

本文共 2128 字,大约阅读时间需要 7 分钟。

 1: 因为程序涉及到上传,开始暂停,继续,删除, thread 在老版本用使用th.Abort(); th.Resume(); 停止 恢复  th.Suspend(); 挂起

猛的一看挺合适啊..但微软已经明确指出已经过时了.  在使用的过程中,几个状态来回切换几次,很容易出现问题, 判断了好多种状态,最后还是报异常.所以这种方式不建议用了,尽管强用还可以用,但用起来非常的不流畅.

比如下边大家看看单单状态的判断

else  if(th.ThreadState == (ThreadState.Background | ThreadState.Suspended))            {                th.Resume();                th.Abort();                this.gridView1.DeleteSelectedRows();                Console.WriteLine("线程终止");            }    下边

if (th.ThreadState == (ThreadState.Background | ThreadState.Running))

{
th.Suspend();
Console.WriteLine("线程挂起");
}

 

就这样加上了,程序还是会出现异常.所以淘汰了应该处于上边的原因吧.

2:那既然不能用了.该用什么呢?  可以用thread 加信号机制的方式实现附加一个程序

namespace Test{     public partial class Form4 : Form    {        public Form4()        {            InitializeComponent();            Label.CheckForIllegalCrossThreadCalls = false;        }        Thread thread;        ManualResetEvent ma;        bool on_off = false;        bool stop = false;        private void button1_Click(object sender, EventArgs e)        {            thread = new Thread(Runtime);            thread.Start();        }        void Runtime()        {            for (int i = 1; i <= 100; i++)            {                if (stop)                    return;                if (on_off)                {                    ma = new ManualResetEvent(false);                    ma.WaitOne();                }                textBox1.AppendText("计时 :" + i + "\r\n");                Thread.Sleep(100);            }        }        private void button2_Click(object sender, EventArgs e)        {            on_off = true;            textBox1.AppendText("暂停中 :\r\n");        }        private void button3_Click(object sender, EventArgs e)        {            on_off = false;            ma.Set();            textBox1.AppendText("继续计时 :\r\n");        }        private void button4_Click(object sender, EventArgs e)        {            stop = true;            textBox1.AppendText("停止计时 \r\n");        }    }}

 上边 配合on off  有个 ma.set() 发送信号,相当于地铁的入站口刷卡.  ma.waitone () 程序暂停处 相当于那个档子, set 刷卡, 档子撤开,程序继续进行下一步.

转载于:https://www.cnblogs.com/zuochanzi/p/7681873.html

你可能感兴趣的文章
cogs 539. 牛棚的灯
查看>>
SQL SERVER 备份数据库到指定路径语句
查看>>
3.Knockout.Js(属性绑定)
查看>>
v140平台工具集与v110工具集选择
查看>>
EF6+Sqlite连接字符串的动态设置
查看>>
下拉加载更多
查看>>
您是哪一种类型的老板?
查看>>
SQL SERVER 2012 只能识别20个CPU的问题
查看>>
设计模式(十)外观模式
查看>>
C/C++语言中Static的作用详述
查看>>
[Android Samples视频系列之ApiDemos] App-Activity-Recreate
查看>>
ASP开发基础
查看>>
MYSQL性能调优
查看>>
LVM自动扩容
查看>>
笔记整理4
查看>>
idea文件折叠显示出来配置
查看>>
SQLSERVER中的非工作时间不得插入数据的触发器的实现
查看>>
如何写出兼容大部分浏览器的CSS 代码
查看>>
第二阶段冲刺第八天,6月7日。
查看>>
java的左移位(<<)和右移位(>>)和无符号右移(>>>)
查看>>