110,570
社区成员
发帖
与我相关
我的任务
分享
public partial class Form1 : Form
{
int count = 8;
object obj = new object();
Thread thread;
ManualResetEvent[] events;
List<TaskInfo> tasks;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
txtMsg.Text = "";
thread = new Thread(new ThreadStart(Test));
thread.Start();
}
public void Test()
{
events = new ManualResetEvent[count];
tasks = Init();
for (int i = 0; i < count; i++)
{
events[i] = new ManualResetEvent(false);
ThreadPool.QueueUserWorkItem(new WaitCallback(DoWork), i);
}
ManualResetEvent.WaitAll(events);
InvokeSetText("任务完成");
}
public void DoWork(object o)
{
int i = (int)o;
TaskInfo model;
while (tasks.Count > 0)
{
Monitor.Enter(obj);
try
{
model = tasks[0];
tasks.RemoveAt(0);
}
finally
{
Monitor.Exit(obj);
}
Thread.Sleep(2000);
//长任务抓网页Snap(model.Url);
InvokeSetText(string.Format("{0} 线程:{1}",model.Name,o));
Thread.Sleep(1000);
}
events[i].Set();
}
public delegate void SetTextHandler(string msg);
public void InvokeSetText(string msg)
{
SetTextHandler d = new SetTextHandler(SetText);
Invoke(d, msg);
}
public void SetText(string msg)
{
txtMsg.Text = msg + "\r\n" + txtMsg.Text;
}
public List<TaskInfo> Init()
{
List<TaskInfo> taskInfos = new List<TaskInfo>();
TaskInfo task;
for (int i = 0; i < 30; i++)
{
task = new TaskInfo(i.ToString(), string.Format("任务{0}", i),"www.hao123.com");
taskInfos.Add(task);
}
return taskInfos;
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (thread != null)
{
thread.Abort();
}
}
}
public class TaskInfo
{
private string m_Id;
private string m_Name;
private string m_Url;
public string Id
{
get { return m_Id; }
set { m_Id = value; }
}
public string Name
{
get { return m_Name; }
set { m_Name = value; }
}
public string Url
{
get { return m_Url; }
set { m_Url = value; }
}
public TaskInfo()
{ }
public TaskInfo(string _id, string _name,string _url)
{
m_Id = _id;
m_Name = _name;
m_Url = _url;
}
}
lock(obj)
{
if(task.count==0)
break;
else
{
model = tasks[0];
tasks.RemoveAt(0);
}
}