这是因为你从线程去操作datagridview的原因

解决方案 »

  1.   

    需要用委托、Invoke来解决,你可以再网上搜下“跨线程调用控件”。
      

  2.   

    把DataGridView显示模式改为虚模式,用Invoke刷新DataGridViewprivate void RefUI<T>(List<T> list)
    {
                if (InvokeRequired)
                {
                    BeginInvoke(new Action<List<T>>(RefUI),list);
                }
                else
                {
                     dataContainer.RowCount = list.Count;                 dataContainer.Refresh();            }
    }
       //虚模式数据绑定事件
       private void dataContainer_CellValueNeeded(object sender, DataGridViewCellValueEventArgs e)
    {
    if (list != null && list.Count > 0 && list.Count > e.RowIndex)
    {
             T t = list[e.RowIndex]; 
             //绑定
    }
    }
      

  3.   


    private void fuc()
            {
                char[] tmpValue = "1,2,3,4,5,6,7,8,9,10".ToCharArray();
                string[] strs = (new string(tmpValue)).Split(',');            DataTable dt = new DataTable("Data");
                DataRow dr;            dr = dt.NewRow();
                for (int j = 0; j < strs.Length; j++)
                {
                    dt.Columns.Add(new DataColumn(((char)('A' + j)).ToString(), typeof(double)));
                    dr[j] = strs[j];
                }
                dt.Rows.Add(dr);            lock(dt)
                {
                     this.BeginInvoke(new Action(()=>dataGridView1.DataSource = dt));
                }

            }注:红色部分的Action貌似需要3.x的framework才有的
      

  4.   

    堆栈信息看似和我一样,应该还会出现一个大红叉号。
    一段痛苦的经历~~解决方法如下:
    public class DataGridViewPlus : DataGridView { 
    {
    try { 
    base.OnPaint( e ); 

    catch { 
    Invalidate(); 


    }
    参考:
    (1) http://wenku.baidu.com/view/a3a7ed0d79563c1ec5da7126.html
    (2) http://social.msdn.microsoft.com/Forums/windows/en-US/fdd94896-80e9-4e91-9ed5-0348bf2633a9/datagridview-red-x?forum=winforms