我真是搞不明白啊,有劳懂的人给讲讲呢,真心先谢谢您了!
“tssl航班查询状态”和“tsslOPC服务器状态”就是主窗口上的状态条标签
private void timer1_Tick(object sender, EventArgs e)
{
timer1.Enabled = false;
timer1.Interval = 60000;
btn设置登机桥是否加入航班联动.Enabled = false;
btn停止航班联动.Enabled = false;
BackgroundWorker bw = new BackgroundWorker();
bw.DoWork += 向OPC服务器中写入命令;
bw.RunWorkerCompleted += 后台写入完成;
bw.RunWorkerAsync();
}
private void 向OPC服务器中写入命令(object sender, DoWorkEventArgs e)
{
try
{
hbqlsjjh.查询航班全量数据();
if (登机桥是否航班联动 == true)//登机桥加入了航班联动
{
if (tssl航班查询状态.Text == " 本次航班查询成功")//本次查询成功,根据航班信息写入
{
for (int i = 0; i < 49; i++)
{
OPC.写登机桥航班控制点(i, Convert.ToString(登机桥根据航班是否开(i)));
}
}
else if (tssl航班查询状态.Text == " 本次航班查询失败") //本次查询失败,打开所有登机桥的空调
{
for (int i = 0; i < 49; i++)
{
OPC.写登机桥航班控制点(i, "1");
}
}
}
}
catch (Exception err)
{
tsslOPC服务器状态.Text = " 与OPC服务器交互失败:" + err.Message;
}
}
1、进程与线程:进程作为操作系统执行程序的基本单位,拥有应用程序的资源,进程包含线程,进程的资源被线程共享,线程不拥有资源。
2、BackgroundWorker就是为了创建一条新的线程
3、界面是主线程创建的,因此在新的线程无法直接修改界面,但是可以采用委托的方式进行修改,你代码中的“+= 向OPC服务器中写入命令;”就可以看成是一个委托,所以可以操作
4、主线程边执行边修改界面是不行的,因为主线程的任务没执行完,会有卡死的感觉。而BackgroundWorker就是为了创建一条新的线程可以放在后台去处理,因此主线程上的界面的其他事件可以继续运行。
多线程的好处:
1.使用线程可以把占据时间长的程序中的任务放到后台去处理
2.用户体验更好,这样比如用户点击了一个按钮去触发某件事件的处理,可以弹出一个进度条来显示处理的进度
3.程序的运行效率可能会提高
4.在一些等待的任务实现上如用户输入,文件读取和网络收发数据等,线程就比较有用了.
多线程的缺点:
1.如果有大量的线程,会影响性能,因为操作系统需要在它们之间切换.
2.更多的线程需要更多的内存空间
3.线程中止需要考虑对程序运行的影响.
4.通常块模型数据是在多个线程间共享的,需要防止线程死锁情况的发生