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;
}
}
}
查看全文
相关阅读:
java 判断返回值的类型
使用反射报异常:object is not an instance of declaring class解决方案
InvocationTargetException 异常
在MyEclipse下统计工程的代码(package、行数、类个数)
跨域问题,及解决方案
封装原生Ajax发送请求
win10系统,打不开个性化,并且报错找不到指定模块
jquery删除内容是动态修改序号
使用jquery实现返回顶部按钮
jquery监听video标签视频播放暂停状态
原文地址:https://www.cnblogs.com/zhangpengshou/p/1594862.html
最新文章
PTA 7-1 银行业务队列简单模拟
Mr. Panda and Crystal HDU
Tourists Gym
RMQ原理及实现
性能测试平台
springboot web 开发
SonarQube
安全测试
prometheus + grafana 实时监控 Windows性能-视频
prometheus + grafana 实时监控 Windows性能
热门文章
jmeter性能测试
jmeter 中进行https请求测试
jenkin输出文字颜色实现
【成长之路】【python】python基础5-模块
Java相对路径读取文件
JAVA 使用相对路径读取文件
如何取消中国移动wlan自动登录功能
bool与boolean、Long与long的区别
java反射机制详解以及应用(一)
ERROR: JDWP Unable to get JNI 1.2 environment, jvm->GetEnv() return code = -2
Copyright © 2011-2022 走看看