俺写过的例子 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.IO; using System.Windows.Forms; using ICSharpCode.SharpZipLib.Zip; using System.Threading; namespace zipTest { public partial class Form1 : Form { public delegate void MyProcesses(int idx, int donecount); public Form1() { InitializeComponent(); } private void Processes(int idx, int donecount) { listView1.Items[idx].SubItems[2].Text = donecount.ToString(); } private void OnProcesses(int idx, int donecount) { lock (this.listView1) { object[] pList = { idx, donecount }; MyProcesses mi = new MyProcesses(this.Processes); listView1.BeginInvoke(mi, pList); } } private void button1_Click(object sender, EventArgs e) { listView1.Items.Clear(); for (int i = 0; i < 5; i++) { ListViewItem item = new ListViewItem(); item.Text = i.ToString(); item.SubItems.Add("10"); item.SubItems.Add("0"); listView1.Items.Add(item); ZipTh th = new ZipTh(i, 10); th.Processes += new OnProcesses(OnProcesses); th.StartThread(); } } private void listView1_SelectedIndexChanged(object sender, EventArgs e) { } } public delegate void OnProcesses(int idx,int donecount); public class ZipTh { private int idx; private int count; public event OnProcesses Processes; public ZipTh(int i, int c) { idx = i; count = c; } public void doProcesses(int i, int c) { Processes(i, c); } public void Run() { int donecount = 0; for (int i = 0; i < count; i++) { ICSharpCode.SharpZipLib.Zip.FastZip zip = new ICSharpCode.SharpZipLib.Zip.FastZip(); zip.CreateEmptyDirectories = true; zip.CreateZip(@"c:\" + idx.ToString() + @".zip", @"C:\temp", true, null); donecount++; doProcesses(idx,donecount); }
} public void StartThread() { Thread newThread; newThread = new Thread(new ThreadStart(Run)); newThread.Start(); } } }
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.IO;
using System.Windows.Forms;
using ICSharpCode.SharpZipLib.Zip;
using System.Threading;
namespace zipTest
{ public partial class Form1 : Form
{
public delegate void MyProcesses(int idx, int donecount); public Form1()
{
InitializeComponent();
} private void Processes(int idx, int donecount)
{
listView1.Items[idx].SubItems[2].Text = donecount.ToString();
} private void OnProcesses(int idx, int donecount)
{
lock (this.listView1)
{
object[] pList = { idx, donecount };
MyProcesses mi = new MyProcesses(this.Processes);
listView1.BeginInvoke(mi, pList);
}
}
private void button1_Click(object sender, EventArgs e)
{
listView1.Items.Clear();
for (int i = 0; i < 5; i++)
{
ListViewItem item = new ListViewItem();
item.Text = i.ToString();
item.SubItems.Add("10");
item.SubItems.Add("0"); listView1.Items.Add(item); ZipTh th = new ZipTh(i, 10);
th.Processes += new OnProcesses(OnProcesses); th.StartThread();
}
} private void listView1_SelectedIndexChanged(object sender, EventArgs e)
{ }
}
public delegate void OnProcesses(int idx,int donecount);
public class ZipTh
{
private int idx;
private int count;
public event OnProcesses Processes; public ZipTh(int i, int c)
{
idx = i;
count = c;
} public void doProcesses(int i, int c)
{
Processes(i, c);
}
public void Run()
{
int donecount = 0;
for (int i = 0; i < count; i++)
{
ICSharpCode.SharpZipLib.Zip.FastZip zip = new ICSharpCode.SharpZipLib.Zip.FastZip();
zip.CreateEmptyDirectories = true;
zip.CreateZip(@"c:\" + idx.ToString() + @".zip", @"C:\temp", true, null);
donecount++;
doProcesses(idx,donecount);
}
} public void StartThread()
{
Thread newThread;
newThread = new Thread(new ThreadStart(Run));
newThread.Start();
} }
}
如果是动态定义用CodeDom,如果是动态创建用Delegate,如果是动态调用用reflection