工作需要要用到多线程了,呵呵,高科技呀
public partial class Form1 : Form
{
static int i = 0;
public Form1()
{
InitializeComponent();
}
delegate void lbdelegate();
private void button1_Click(object sender, EventArgs e)
{
label2.Text = i.ToString();
//Thread.Sleep(5000);
Thread thread = new Thread(this.gettime);
thread.Start();
label2.Text = i.ToString();
//thread.Abort();
//gettime();
}
private void gettime()
{
if (this.InvokeRequired == false)
{
//Thread.Sleep(5000);
label1.Text = DateTime.Now.ToString();
i = 1000;
}
else
{
this.Invoke(new lbdelegate(gettime));
}
}
private void button2_Click(object sender, EventArgs e)
{
label2.Text = i.ToString();
}
这个例子有两点注意,子线程是依赖主线程的,如果主线程SLEEP,子线程同样会SLEEP,如果想在控件中使用子线程,要用上面的方法,还没有遇到其他特殊处理的,等项目同步更新
今天又无意中发现了另一种方法来实现进程间的通信,用在UI进程和子线程间的
private void button1_Click(object sender, EventArgs e)
{
Thread thread = new Thread(this.webthr);
//thread.ApartmentState = ApartmentState.STA;
thread.TrySetApartmentState(ApartmentState.STA);
thread.Start();
}
void webthr()
{
//WebBrowser web = new WebBrowser();
//web.Navigate("http://oofay.com.cn/js/data/game.js");
//web.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(web_DocumentCompleted);
this.Invoke(new EventHandler(this.invokeTest));
}
public void invokeTest(object sender, EventArgs e)
{
System.Windows.Forms.WebBrowser web = new WebBrowser();
//this.Controls.Add(web);
web.Navigate("http://oofay.com.cn/");
web.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(web_DocumentCompleted);
}
void web_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
WebBrowser web = sender as WebBrowser;
try
{
string html = "";
html = web.Document.GetElementById("list2").InnerHtml;
this.label1.Text = html;
}
catch
{
throw new NotImplementedException();
}
}