在winform中使用多线程 并跨线程操作按钮及文本框
来源:互联网 发布:json解析网页 编辑:程序博客网 时间:2024/06/01 03:58
继续贴吧江湖的项目
在利用前面的socket Http Get 和Post 已经可以成功登陆论坛
但是在socket中读取HTML代码速度让我很难受
所以在form类中创建新的线程来操作socket 然后在窗口中放了一个滚动条 感觉满好看的 vista启动画面那种
Run()方法是调用以及操作socket的方法 就是准备在新线程中执行的方法 也就是俗称耗时的方法
在成员变量中定义线程 以及 回掉委托 :
- private Thread th = null;//定义线程
- delegate void SetTextCallback(string text);//定义一个包含参数的委托
- delegate void f(); //定义一个用作跨线程操作窗体控件的委托
定义两个委托是 一个对文本框操作 一个对按钮操作
事件触发代码
- private void button1_Click(object sender, EventArgs e)
- {
- progressBar1.Style = ProgressBarStyle.Marquee;
- th = new Thread(new ThreadStart(Run));
- th.Start();
- //progressBar1.Style = ProgressBarStyle.Blocks;
- }
下面几个方法是在新线程中对窗体原创线程利用委托来进行回调请求
以及原线程收到请求后做的事情
- private void SetText(string text)//跨线程操作窗体 改变文本框内容
- {
- if (this.richTextBox1.InvokeRequired)
- {
- SetTextCallback d = new SetTextCallback(SetText);
- this.Invoke(d, new object[] { text });
- }
- else
- {
- this.richTextBox1.Text = text;
- }
- }
- private void LoginButton()//请求窗体创建线程将按钮1设置为false
- {
- button1.Enabled = !button1.Enabled;
- }
- private void UiCon(f objf)//跨线程操作窗体控件,参数为定义的委托类对象
- {
- Invoke(objf);
- }
- private void ProgBar()//请求窗体创建线程将滚动条设置为Blocks
- {
- progressBar1.Style = ProgressBarStyle.Blocks;
- }
新线程方法中对回掉请求的调用
- UiCon(new f(ProgBar));
- SetText(Html);
- UiCon( new f(LoginButton));
SetText方法的实现过程与UiCon本质是一样的
SetText方法多了一个判断当前线程是否为窗体创建线程
UiCon只是方便我减少代码量而做了一个传递委托对象并调用的方法
大概就这些
还有更简单的那个BackGroundWorker类可以达到这样的功能
不过那个是控件
还是喜欢对底层的一些东西来操作 所以没有理会
- 在winform中使用多线程 并跨线程操作按钮及文本框
- winform 多线程执行操作,并跨线程操作控件
- C# WinForm程序中,使用多线程,在关闭窗体时 怎么关闭窗体的所有线程,使程序退出。
- 在多线程中调用WinForm
- 在Winform中使用C#异步优化耗时操作
- winform跨线程操作控件
- 在winform中实现多窗口的使用 及切换
- c# winform下使用多线程时在线程里如何安全访问窗体控件InvokeRequired
- 在线程中使用session操作数据库
- Winform中多线程的控件访问引发的“线程间操作无效,从不是创建控件的线程访问它”
- C#中工作线程和多线程跨线程操作控件
- 在多线程中如何调用Winform
- 在多线程中如何调用Winform
- 在多线程中如何调用Winform
- 在多线程中调用WinForm(C#) (转载)
- 在多线程中如何调用Winform
- 在多线程中如何调用Winform
- 在多线程中如何调用Winform
- 小程序代码寻求帮忙理解
- debian 的更新源
- rootkit for linux 19.山寨tcpip协议栈--连接的建立和初始化.doc
- 晕,我要下东西
- Java编程那些事儿33——if语句语法(3)
- 在winform中使用多线程 并跨线程操作按钮及文本框
- 2009计算机新趋势:节能电脑大行其道。
- 网站项目成功的关键是什么?
- 关于extern的问题
- HttpModule详解
- 使用wubi在windows中安装ubuntu8.10
- IIS配置错误列表,和详细解决方案(积累中)
- MyEclipse启动tomcat问题:please verify the preferences field with the prompt :can not find a free socket,郁闷了半天
- 串口通讯之我见