zoukankan
html css js c++ java
CheckForIllegalCrossThreadCalls
CheckForIllegalCrossThreadCalls允许子线呈随时更新UI,适用于子线程不断刷新数据源,UI线程不断显示数据源数据。使用情况举例:
using
System;
using
System.Collections.Generic;
using
System.ComponentModel;
using
System.Data;
using
System.Drawing;
using
System.Text;
using
System.Windows.Forms;
using
Tdtk.MSMQ;
using
System.Threading;
using
System.Messaging;
namespace
TDService
{
public
partial
class
ThreadTest : Form
{
private
DataTable dtblLog;
MqServerOperation MqOperLog
=
new
MqServerOperation();
System.Timers.Timer tmTrick
=
new
System.Timers.Timer();
public
delegate
void
OperationDelegate();
public
ThreadTest()
{
InitializeComponent();
Control.CheckForIllegalCrossThreadCalls
=
false
;
tmTrick.Interval
=
1000
;
tmTrick.Elapsed
+=
new
System.Timers.ElapsedEventHandler(OnTimeInvokeLog);
tmTrick.Enabled
=
true
; tmTrick.Start();
if
(InitServerQueue()) StartReciveThread();
}
/**/
///
<summary>
///
初始化消息队列
///
</summary>
///
<returns></returns>
private
bool
InitServerQueue()
{
dtblLog
=
new
DataTable(); dtblLog.Columns.Add(
"
BangLogCode
"
); dtblLog.Columns.Add(
"
CardCode
"
); dtblLog.Columns.Add(
"
LogContent
"
);
dtblLog.Columns.Add(
"
PonderationType
"
); dtblLog.Columns.Add(
"
LogTime
"
); dtblLog.Columns.Add(
"
BangRoom
"
); dtblLog.Columns.Add(
"
CupboardNo
"
);
return
MqOperLog.InitServerQueue(
"
LogServer
"
);
}
/**/
///
<summary>
///
打开线程开始从消息队列读取
///
</summary>
private
void
StartReciveThread()
{
Thread thLogReciver
=
new
Thread(
new
System.Threading.ThreadStart(LogReciverMessage));
thLogReciver.IsBackground
=
true
; thLogReciver.SetApartmentState(System.Threading.ApartmentState.STA); thLogReciver.Start();
}
/**/
///
<summary>
///
从LogServer消息队列中,实时接收日志数据(10毫秒)
///
</summary>
private
void
LogReciverMessage()
{
MessageQueue MqReciver
=
MqOperLog.GetServerMqReciver();
MqReciver.Formatter
=
new
System.Messaging.BinaryMessageFormatter();
while
(
true
)
{
System.Messaging.Message message
=
MqReciver.Receive();
try
{
string
[] strLogArray
=
message.Body.ToString().Split(
'
,
'
);
if
(strLogArray.Length
==
7
)
{
if
(dtblLog.Rows.Count
>
10
)
{
dtblLog.Rows.RemoveAt(
0
);
}
DataRow dtrLog
=
dtblLog.NewRow();
dtrLog[
"
BangLogCode
"
]
=
strLogArray[
0
];
dtrLog[
"
CardCode
"
]
=
strLogArray[
1
];
dtrLog[
"
LogContent
"
]
=
strLogArray[
2
];
dtrLog[
"
PonderationType
"
]
=
strLogArray[
3
];
dtrLog[
"
LogTime
"
]
=
strLogArray[
4
];
dtrLog[
"
BangRoom
"
]
=
strLogArray[
5
];
dtrLog[
"
CupboardNo
"
]
=
strLogArray[
6
];
dtblLog.Rows.Add(dtrLog);
//
在dtblLog中添加一行
}
}
catch
(Exception exLog)
{
}
System.Threading.Thread.Sleep(
10
);
}
}
/**/
///
<summary>
///
定时异步调用
///
</summary>
///
<param name="sender"></param>
///
<param name="e"></param>
protected
void
OnTimeInvokeLog(
object
sender, EventArgs e)
{
OperationDelegate delgate
=
null
;
delgate
+=
new
OperationDelegate(SetDataGrdView);
tmTrick.SynchronizingObject
=
this
;
tmTrick.SynchronizingObject.BeginInvoke(delgate,
null
);
tmTrick.SynchronizingObject
=
null
;
}
protected
void
SetDataGrdView()
{
dgvWeightBangLog.DataSource
=
dtblLog;
//
dataGridView1.DataSource = dtblLog;
}
}
}
查看全文
相关阅读:
性能优化之
gruntjs开发实例
从数组里随机获取N项
调试工具-fiddler:本地资源替换线上调试
HTML5-canvas实例:2D折线数据图与2D扇形图
移动前端兼容性笔记
Less开发指南(三)- 代码文件跟踪调试
像纸质笔记本一样给div,textarea添加行的分割线
基于视图的增删改查操作(颠覆传统思维吧)
恶劣的百度推广人员
原文地址:https://www.cnblogs.com/zhangpengshou/p/1594862.html
最新文章
从零讲解搭建一个NIO消息服务端
Netty中的Channel之数据冲刷与线程安全(writeAndFlush)
求求你,别再过两点一线的生活了
苦了我一年的选择,现在却是我最回味的时光
架构师软技能之协商(上)
求求你,别再过两点一线的生活了
软件架构师之举止沟通
jQuery动画切换引擎插件Velocity.js
HTML--SVG基础
Design--源自生活美学的色彩搭配网站(design-seeds)
热门文章
HTML--Canvas基础入门
CSS--使用伪选择器制作箭头图标
JavaScript--fullPage.js插件
CSS--使用Animate.css制作动画效果
JavaScript--水平幻灯片
(三)Sass和Compass--制作精灵图片
(二)在实战中使用Sass和Compass
记VUE的v-on:textInput无法执行事件的BUG
hybird app项目实例:安卓webview中HTML5拍照图片上传
HTML5-canvas实例:刮刮乐游戏
Copyright © 2011-2022 走看看