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;
}
}
}
查看全文
相关阅读:
使用.Net Core 2.2创建windows服务
Ubuntu 18.04 安装部署Net Core、Nginx全过程
Task的在主线程处理异常信息的Helper类
行转列的处理。
netcore 下加密遇到的问题
关于安装angular-cli环境报错的问题
64位的windows服务安装问题
EF.Mysql在codefirst模式下调用存储过程,和再DbFirst模式下的调用
阿里云消息队列的C#使用http接口发送消息实例
[转载]EF或LINQ 查询时使用IN并且根据列表自定义排序方法
原文地址:https://www.cnblogs.com/zhangpengshou/p/1594862.html
最新文章
Jsp — 内置对象request、response 配置servlet
HTTP协议、Ajax请求
JQuery系统梳理
正则表达式
JS中的DOM— —节点以及操作
Java中的IO流之字节流
Java集合框架之四大接口、常用实现类
面向对象三大特征之多态
Java基础——字符串String
JAVA循环结构示例
热门文章
GoWorld – 用Golang写一个分布式可扩展、可热更的游戏服务器
发现一个很快的golang logging模块:github.com/uber-go/zap
Go语言第一深坑
使用GoWorld游戏服务器引擎轻松实现分布式聊天服务器
Golang使用pprof和qcachegrind进行性能监控-简明教程
Golang中使用heap编写一个简单高效的定时器模块
在Golang中实现有无限容量的同步Queue
在Golang里如何实现结构体成员指针到结构体自身指针的转换
互联网广告学——程序化购买
[转]浅析AD Exchange——RTB模式
Copyright © 2011-2022 走看看