public delegate void MyInvoke( );
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Thread th = new Thread(new ThreadStart(correctfunc));
th.Start();
}
public void func() {
try
{
//.net 禁止从不是本身创建的线程调用。
textBox1.Text = "会出错吗?";
}
catch (Exception e) {
throw new Exception("error! "+e.Message.ToString());
}
}
public void correctfunc() {
try
{
//先判断是否有其他线程调用!
if (textBox1.InvokeRequired)
{
MyInvoke my = new MyInvoke(correctfunc);
this.Invoke(my);
}
else
{
textBox1.Text = "不会出错!";
}
}
catch(Exception e){
throw new Exception("error!"+e.Message.ToString());
}
}
}
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;
/**
* 题目:用多线程实现进度条的滚动。
*
* 假如有个100个事件,每一秒执行一个。当每执行一个事件需要在进度条上和静态框有标注。
*/
namespace WindowsApplication5
{
public delegate void MyInvoke();
public partial class Form1 : Form
{
TimeSpan t = new TimeSpan(0, 0, 1);
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
ThreadStart ts=new ThreadStart(func1);
ts+=func2;
ts += func3;
Thread th = new Thread(ts);
th.Start();
}
void func1(){
if (progressBar1.InvokeRequired)
{
MyInvoke my = new MyInvoke(func1);
this.Invoke(my);
}
{
Thread.Sleep(t);
progressBar1.Value = 33;
}
}
void func2() {
if (progressBar1.InvokeRequired)
{
MyInvoke my = new MyInvoke(func2);
this.Invoke(my);
}
{
Thread.Sleep(t);
progressBar1.Value =66;
}
}
void func3()
{
if (progressBar1.InvokeRequired)
{
MyInvoke my = new MyInvoke(func3);
this.Invoke(my);
}
{
Thread.Sleep(t);
progressBar1.Value = 99;
}
}
}
}