类testThread
using System;
using System.Collections.Generic;
using System.Text;
namespace testThread
{
public class MessageSendEventArgs : EventArgs
{
public String Message;
public MessageSendEventArgs(string message)
{
this.Message = message;
}
}
class SubThread
{
public delegate void MessageSendEventHandler(object sender, MessageSendEventArgs e);
//定义事件
public event MessageSendEventHandler MessageSend;
protected virtual void OnMessageSend(MessageSendEventArgs e)
{
if (MessageSend != null)
MessageSend(this, e);
}
//定义一个线程
public System.Threading.Thread sendthread;
public void Sendding()
{
while(true)
{
System.Threading.Thread.Sleep(500);
this.OnMessageSend(new MessageSendEventArgs(DateTime.Now.ToString()));
}
}
//开始线程函数
public void StartSend()
{
sendthread = new System.Threading.Thread(new System.Threading.ThreadStart(Sendding));
sendthread.Start();
}
//结束线程函数
public void EndSend()
{
sendthread.Abort();
}
}
}
using System.Collections.Generic;
using System.Text;
namespace testThread
{
public class MessageSendEventArgs : EventArgs
{
public String Message;
public MessageSendEventArgs(string message)
{
this.Message = message;
}
}
class SubThread
{
public delegate void MessageSendEventHandler(object sender, MessageSendEventArgs e);
//定义事件
public event MessageSendEventHandler MessageSend;
protected virtual void OnMessageSend(MessageSendEventArgs e)
{
if (MessageSend != null)
MessageSend(this, e);
}
//定义一个线程
public System.Threading.Thread sendthread;
public void Sendding()
{
while(true)
{
System.Threading.Thread.Sleep(500);
this.OnMessageSend(new MessageSendEventArgs(DateTime.Now.ToString()));
}
}
//开始线程函数
public void StartSend()
{
sendthread = new System.Threading.Thread(new System.Threading.ThreadStart(Sendding));
sendthread.Start();
}
//结束线程函数
public void EndSend()
{
sendthread.Abort();
}
}
}
那么在主窗体内,使用 Control.CheckForIllegalCrossThreadCalls = false;
可以回到.net1.1默认可以从非主线程修改控件。也可以使用invoke方法。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace testThread
{
public partial class Form1 : Form
{
public delegate void MessageHandler(MessageSendEventArgs e);
SubThread _subthread; //定义一个线程
public Form1()
{
InitializeComponent();
// Control.CheckForIllegalCrossThreadCalls = false;
this._subthread = new SubThread(); //创建线程实例
this._subthread.MessageSend += this._subthread_MessageSend;
//this._subthread.MessageSend += this._subthread_MessageSend; //订阅事件
}
public void MessageAdd(MessageSendEventArgs e)
{
listBox1.Items.Add(e.Message);
}
private void _subthread_MessageSend(object sender, MessageSendEventArgs e)
{
//实例化代理
MessageHandler handler = new MessageHandler(MessageAdd);
////调用Invoke
this.Invoke(handler, new object[] { e });
//listBox1.Items.Add(e.Message);
}
private void button1_Click(object sender, EventArgs e)
{
this._subthread.StartSend();
this.listBox1.Items.Add("开始....");
}
private void button2_Click(object sender, EventArgs e)
{
this._subthread.EndSend();
this.listBox1.Items.Add("停止");
}
}
}
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace testThread
{
public partial class Form1 : Form
{
public delegate void MessageHandler(MessageSendEventArgs e);
SubThread _subthread; //定义一个线程
public Form1()
{
InitializeComponent();
// Control.CheckForIllegalCrossThreadCalls = false;
this._subthread = new SubThread(); //创建线程实例
this._subthread.MessageSend += this._subthread_MessageSend;
//this._subthread.MessageSend += this._subthread_MessageSend; //订阅事件
}
public void MessageAdd(MessageSendEventArgs e)
{
listBox1.Items.Add(e.Message);
}
private void _subthread_MessageSend(object sender, MessageSendEventArgs e)
{
//实例化代理
MessageHandler handler = new MessageHandler(MessageAdd);
////调用Invoke
this.Invoke(handler, new object[] { e });
//listBox1.Items.Add(e.Message);
}
private void button1_Click(object sender, EventArgs e)
{
this._subthread.StartSend();
this.listBox1.Items.Add("开始....");
}
private void button2_Click(object sender, EventArgs e)
{
this._subthread.EndSend();
this.listBox1.Items.Add("停止");
}
}
}