剑弑 发表于 2015-8-28 17:30:47

关于多线程问题

调试会把dataGridView1的行清空,导致直接跳出调试。
有没有人知道怎么解决或知道原因。

ibcadmin 发表于 2015-8-29 09:57:09

贴代码

剑弑 发表于 2015-8-29 13:50:59

哪图片就是所写的代码

剑弑 发表于 2015-8-29 13:56:46

//类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Data;

namespace WindowsFormsApplication1
{
    class StartThread
    {
      int StartNum;//单条线程的处理行数
      int StartSum;//线程的处理总行数
      string FFName;//方法名字(带类名)
      public StartThread(int startSum, int startNum)
      {
            StartSum = startSum;
            StartNum = startNum;
      }
      public void C1()
         {
            
             if (StartSum % StartNum == 0)
             {
               for (int i = 0; i < StartSum / StartNum; i++)
               {
                     
                     Thread thr = new Thread(new ParameterizedThreadStart(C2));
                     thr.IsBackground=true;
                     thr.Start(i);
               }
             }
             else
             {
               for (int i = 0; i <Convert.ToInt32(StartSum / StartNum)+1; i++)
               {
                     Thread thr = new Thread(new ParameterizedThreadStart(C2));
                     thr.IsBackground = true;
                     thr.Start(i);
               }
             }
         }
      public void C2(object i)
      {
            
            
            Form1 fr = new Form1();
            int a = Convert.ToInt32(i);
            int b = Convert.ToInt32(StartSum / StartNum);
            if (a == Convert.ToInt32(StartSum / StartNum))
            {
                fr.thread1(StartNum,a);

            }
            else
            {
                fr.thread2(a, StartSum % StartNum, StartNum, Dt);
            }
      }
    }
}


//窗体
private void Form1_Load(object sender, EventArgs e)
      {
            dt.Columns.Add("Column6");
            dt.Columns.Add("C72");
            for (int i = 0; i < 109; i++)
            {
                DataRow dar = dt.NewRow();
                dar = i;
                dar = i;
                dt.Rows.Add(dar);
            }
            dataGridView1.DataSource = dt;
            StartThread th = new StartThread(109, 10);
            th.C1();
      }
public voidthread1(int h, int j )
      {
            int c = h * j;
            for (int i = 0; i < j; i++)
            {
                dataGridView1.Rows.Cells["C7"].Value = c;
                c++;
            }
      }
      public void thread2(int j,int a,int b)
      {
            int m = dt.Rows.Count;
            int c = j * b;
            for (int i = 0; i < a; i++)
            {
                dataGridView1.Rows.Cells["C7"].Value = c;
                c++;
            }
      }

ibcadmin 发表于 2015-8-31 09:08:41

检查c值是否为空 c值是j * b 所以也要检查这两个,还有,一般跳出线程都是抛异常了,断电调试下

剑弑 发表于 2015-8-31 12:31:32

ibcadmin 发表于 2015-8-31 09:08
检查c值是否为空 c值是j * b 所以也要检查这两个,还有,一般跳出线程都是抛异常了,断电调试下

原因我已经想明白了,是开启线程时没有把Dt传到类里面;要传到类里面在传到窗体的方法才行,不过这样的话用数据就又乱了

剑弑 发表于 2015-8-31 12:35:02

我想实现的功能是,使用多线程在同一张表中每个线程各自处理表中的m行到n行(比如是0~100或100~200)

jakey0108 发表于 2017-7-11 18:00:14

程序代码贴出来 看下

剑弑 发表于 2017-7-14 09:12:15

jakey0108 发表于 2017-7-11 18:00
程序代码贴出来 看下

这问题早自己解决了

jakey0108 发表于 2017-7-14 13:10:57

剑弑 发表于 2017-7-14 09:12
这问题早自己解决了

是多线程的异步加载吗
页: [1] 2
查看完整版本: 关于多线程问题