您现在的位置:首页 >> 软件开发 >> 内容

C#编程笔记

时间:2019-10-15 06:44:50 点击:

  核心提示://允许操作其它线程创建的控件Control.CheckForIllegalCrossThreadCalls = false;...

 //允许操作其它线程创建的控件
 Control.CheckForIllegalCrossThreadCalls = false;


*************************************************************


//无数据时清空datagridview,连同行列结构一起删除。
dataGridView1.DataSource = null;


*************************************************************


在子线程中刷新dataGridView出现滚动条无显示或假死的解决办法


在多线程中对DataGridView指定 DataSource 来填充数据,更新数据的时候,会导致DataGridView出现假死,显示错误或者滚动条无法显示的问题,在保证了DataGridView的ScrollBars设置为了Both,数据量大于DataGridView显示的的范围,而且没有冻结列的情况下,解决方法如下:
一是使用 Invoke 将执行数据绑定的代码交回给主线程(因为 DataGridView 是主线程创建的);
二是在指定 DataSource 之前,将其置为 null。


实现代码如下:


//放在主程序中
private delegate void InvokeHandler();



//放入刷新dataGridView的子线程中
this.Invoke(new InvokeHandler(delegate()
            {
                dataGridView1.DataSource = null;
                dataGridView1.DataSource = dgv_dt;
            }));


***************************************************************


使用MelsecFxSerial类库连接PLC读DM数据成功后,断开连接,再重读DM数据,经常出现读数据错误提示


原因是PLC再次连接时没有执行关闭指令,解决方法如下:


首先在类函数中实例化连接对象,接着在连接PLC的按钮中先关闭PLC连接对象、重新实例化后再打开PLC连接,操作代码如下:


    public partial class Form1 : Form
    {
        private MelsecFxSerial melsecSerial = new MelsecFxSerial();


        //连接PLC
        private void button1_Click(object sender, EventArgs e)
        {
            melsecSerial.Close();
            melsecSerial = new MelsecFxSerial();
            //连接参数设置代码此处省略....
            melsecSerial.Open();
        }


     }


 

作者:站长 来源:原创
相关文章
  • 没有相关文章
共有评论 0相关评论
发表我的评论
  • 大名:
  • 内容:
  • 陈工笔记(www.dui580.com) © 2019 版权所有 All Rights Reserved.
  • 站长:陈工 微信号:chengongbiji
  • Powered by 陈工