Thread,Invoke
2010-12-20 17:26
113 查看
代码
///////////////////////////////调用类 using System; using System.Collections.Generic; using System.ComponentModel; using System.Threading; using System.Text; using System.Windows.Forms; namespace WinFormAddDataLoading { partial class Form2 : Form { public Form2() { InitializeComponent(); } /// <summary> /// 设置显示信息 /// </summary> /// <param name="message"></param> public void SetMessage(string message) { this.label1.Text = message; } /// <summary> /// 设置ProgressBar控件的最大值 /// </summary> /// <param name="count"></param> public void SetMaxCount(int count) { this.progressBar1.Maximum = count; } /// <summary> /// 设置ProgressBar的value(进度) /// </summary> /// <param name="values"></param> public void SetValue(int values) { this.progressBar1.Value = values; } private void Form2_Load(object sender, EventArgs e) { ///设置样式 this.progressBar1.Style = ProgressBarStyle.Continuous; } /// <summary> /// 关闭窗体 /// </summary> public void Closed() { this.Close(); } } public class LoadingClass { private Thread thread = null; private Form2 f = null; public LoadingClass() { f = new Form2(); thread = new Thread(new ThreadStart(delegate { f.ShowDialog(); })); } public void Show(string message, int max, int values) { f.Show(); f.SetMaxCount(max); f.SetMessage(message); f.SetValue(values); f.Refresh(); } public void ch() { f.Close(); try { thread.Abort(); } catch { } } } } 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; using System.Threading; namespace WinFormAddDataLoading { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private LoadingClass f = null; private void button1_Click(object sender, EventArgs e) { f= new LoadingClass(); for (int i = 0; i < 100; i++) { f.Show("内容:" + i.ToString(), 100, i); //this.Invoke(new MethodInvoker(delegate { f.Show("内容:" + i.ToString(), 100, i); })); Thread.Sleep(10); } f.ch(); //this.button1.Enabled = false; //Thread thread = new Thread(new ThreadStart(run)); //thread.Start(); } private void run() { for (int i = 0; i < 100; i++) { this.Invoke(new MethodInvoker(delegate { f.Show("内容:" + i.ToString(), 100, i); })); Thread.Sleep(10); } f.ch(); // this.button1.Enabled = true; } } }
相关文章推荐
- [转]WinForms UI Thread Invokes: An In-Depth Review of Invoke/BeginInvoke/InvokeRequred
- WinForms UI Thread Invokes: An In-Depth Review of Invoke/BeginInvoke/InvokeRequred
- BeginInvoke、ThreadPool、Task三类异步方法的区别和速度比较
- C# 用匿名委托的方式简化Thread 和 Controle.Invoke的写法
- CheckForIllegalCrossThreadCalls和control.Invoke有什么不同
- CheckForIllegalCrossThreadCalls和control.Invoke
- CheckForIllegalCrossThreadCalls和control.Invoke
- Thread.Start和Delegate.BeginInvoke 以及Control.BeginInvoke
- 不用Invoke就等用 Control.CheckForIllegalCrossThreadCalls = false;
- Another way to Invoke UI from a Worker Thread
- WinForm 之Control.Invoke 和Control.BeginInvoke 方法的使用 Control 不能在创建它的 Thread 之外被调用。但可以通过 invoke 来保证 C
- CheckForIllegalCrossThreadCalls和control.Invoke有什么不同 [转]
- [转]WinForms UI Thread Invokes: An In-Depth Review of Invoke/BeginInvoke/InvokeRequred
- BeginInvoke、ThreadPool、Task三类异步方法的区别和速度比较
- thread.start和threadstart.invoke的区别
- How can I invoke functions on QObjects from another thread?
- WinForms UI Thread Invokes: An In-Depth Review of Invoke/BeginInvoke/InvokeRequred
- Windows Phone 多线程-Thread与BeginInvoke的区别-多种多线程编程比较
- C# 用匿名委托的方式简化Thread 和 Controle.Invoke的写法
- 任运自在:线程(Thread)与委托(Invoke和BeginInvoke)和封装