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
Copyright © 2011-2022 走看看