private void buttonX1_Click(object sender, EventArgs e)
{
int i = 0;
foreach (GridRow row in superGridControl1.PrimaryGrid.FlatVisibleRows)
{
Thread t = new Thread(DeTest);
t.Start(row);
i++;
}
} private delegate void DelegateMain(object obj); private void DeTest(object obj)
{
DelegateMain caller = new DelegateMain(TestBody);
caller.BeginInvoke(obj, null, null);
} private void TestBody(object obj)
{
GridRow row = obj as GridRow;
for (int i = 0; i < 20; i++)
{
row.Cells["LabelX"].Value = "test" + i;
Application.DoEvents();
Thread.Sleep(1000);
}
}
有点闹不明白了。一会执行成功。一会提示线程间访问无效。。
。实现的样子是。循环列表。然后同时每行执行大量的任务,并同时显示结果。
Application.DoEvents();
Thread.Sleep(1000);
那么你还搞什么子线程?
能给个例子吗。分都给你啦
这样会免除很多跨线程处理数据的问题,而且你这个问题也好解决。
浪费您3分钟的时间。
看不懂就是我的问题啦就是个LISTVIEW,循环所有行,
然后每行同时去执行多个任务。然后把每个任务的结果 即时显示到每行的单元格里
第一步 DataGridView.DataSource=DataTable第二步
List<类>a,b,c.....分别对应你的多个线程处理,定时把a,b,c集合里的数据取出来(这里地方最好同步abc而且单线程处理)存入DataTable
别的细节,或程序你自己写吧,我这样的实现有什么不好的地方,还请看到的高手人多指点一下
把回调主线程锁住,直到回调函数执行完毕后再解锁
查下AutoResetEvent
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
} private void button1_Click(object sender, EventArgs e)
{
for (int i = 0; i < 9; i++)
{
listBox1.Items.Add(0);
System.Threading.Thread Add = new System.Threading.Thread(BackThread);
Add.Name = i.ToString();
Add.IsBackground = true;
Add.Start();
}
}
private void BackThread()
{
int Num = 0;
for (int i = 0; i < 999; i++)
{ Num++;
SetDate(Num.ToString(), int.Parse(System.Threading.Thread.CurrentThread.Name));
System.Threading.Thread.Sleep(100); }
}
private delegate void Date(string s ,int i);
private void SetDate(string s ,int i)
{
if (listBox1.InvokeRequired)
{
listBox1.Invoke(new Date(SetDate),new object[]{s,i});
}
else
{
listBox1.Items[i] = s;
}
} private void button2_Click(object sender, EventArgs e)
{
System.Threading.Thread.CurrentThread.Abort();
} }楼主要的