2013年2月20日

InvokeHelper,让跨线程访问/修改主界面控件不再麻烦

摘要: 事实上,本文内容很简单且浅显,所以取消前戏,直接开始。。源代码:在本文最后这里是一张动画,演示在多线程(无限循环+Thread.Sleep)情况下主界面操作不受影响。多线程是一种提高程序运行效率和性能的常用技术。随着我们学习工作的深入,在编程中或多或少会涉及到需要多线程的情况。多数时候,我们的操作模式是后台线程中处理数据,计算结果,然后在前台界面(GUI)中更新显示。在.NETFramework中,为了保证线程安全,避免出现访问竞争等问题,是不允许跨线程访问窗体控件的。如果强行访问,则会引发InvalidOperationException无效操作异常,如下图:为了实现跨线程访问控件,.NET 阅读全文

posted @ 2013-02-20 17:02 HOT SUMMER 阅读(627) 评论(2) 推荐(0) 编辑

.netCF中后台多线程与UI界面交互的冻结问题

摘要: 多线程和用户界面基础知识构建一个不稳定的应用程序您们中的许多人可能已经熟悉从后台线程与UI交互的相关问题,但作为一种复习,让我们快速回顾一下。考虑下面的代码示例。class MyForm : Form{ListBox lbData ;MyForm() {InitializeComponent(); // Create form controlsWork1_(); // Call Work1_ on the current thread}void Work1_(){StreamReader rdr1 = new StreamReader(@"/My Documents/DataFile 阅读全文

posted @ 2013-02-20 16:14 HOT SUMMER 阅读(564) 评论(0) 推荐(0) 编辑

千万别在UI线程上调用Control.Invoke和Control.BeginInvoke,因为这些是依然阻塞UI线程的,造成界面的假死

摘要: .c# Invoke和BeginInvoke 区别Control.Invoke 方法 (Delegate):在拥有此控件的基础窗口句柄的线程上执行指定的委托。Control.BeginInvoke 方法 (Delegate) :在创建控件的基础句柄所在线程上异步执行指定委托。以下为实际应用中碰到的问题,在主线程中启动一个线程,然后在这个线程中启动serviceForm,然而在线程启动后,往serviceForm发送指令,serviceForm.IsHandleCreated老是报serviceForm = null,无法执行指令,采用延时的办法可以解决此问题,但不是高效的办法,后来在servi 阅读全文

posted @ 2013-02-20 16:03 HOT SUMMER 阅读(5011) 评论(2) 推荐(0) 编辑

正则表达式,如果字符串中间还有连续空格的话,仅保留一个空格,即允许字符串中间有多个空格,但连续的空格数不可超过一个

摘要: string input = " xx xxn ";Console.WriteLine("操作前input={0},长度={1}",input,input.Length); //去除重复空格,连续空格替换为单个空格input = Regex.Replace(input.Trim(), "\\s+", " ");Console.WriteLine("操作后input={0},长度={1}", input, input.Length); 阅读全文

posted @ 2013-02-20 14:54 HOT SUMMER 阅读(6455) 评论(1) 推荐(1) 编辑

C#用了多线程界面还是卡死

摘要: 软件界面的响应特性是判断一款软件的非常重要的方面。一般来说,不管你软件功能做得有多么奇妙,如果软件有一点点死机的感觉都会让用户感到很讨厌,甚至怀疑你软件里是否藏有更大的问题。 要提高界面的响应特性,最好的办法莫过于使用多线程,并把呈现界面的线程独立出来。以前只有使用C++才能实现的多线程功能,现在在.Net框架下,所有的语言(包括VB)都可以使用了。不过,使用多线程比使用单一线程要麻烦得多,比如线程之间的同步问题,做得不好很容易出错,而有的时候这种错误要开发人员花上几个星期的时间才能找到。在Windows Form软件中使用多线程更是有一些限制。 下面我们就把在Windows Form软件中使 阅读全文

posted @ 2013-02-20 14:45 HOT SUMMER 阅读(12532) 评论(2) 推荐(0) 编辑

RichTextBox怎么让滚动条总是自动滚动到最底端?

摘要: //让文本框获取焦点this.richTextBoxInfo.Focus();//设置光标的位置到文本尾this.richTextBoxInfo.Select(this.richTextBoxInfo.TextLength,0);//滚动到控件光标处this.richTextBoxInfo.ScrollToCaret(); 阅读全文

posted @ 2013-02-20 14:08 HOT SUMMER 阅读(3068) 评论(0) 推荐(0) 编辑

C#多线程delegate委托方式读取多文件到同一个文本框显示

摘要: 今天,有个网友,提问:指定目录中有若干个很小的文本文件,现在需要使用多线程进行读取。一个文件一个线程或设置共有10个线程之类的方式都可以。把读取的文本全部追加到窗口中的指定编辑框中,只有一个编辑框,都写在这个里面,不分顺序,换行即可。我用委托的方式,写了下面的解决方法:usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Text;usingSystem.Windows.Forms;usingSystem.IO 阅读全文

posted @ 2013-02-20 10:55 HOT SUMMER 阅读(608) 评论(0) 推荐(0) 编辑

C#跨线程更改用户界面

摘要: 这里举一个更改Text属性的例子:1.为了实现更改任意一个控件,这里我定义了一个结构体public struct SetTextParam{ public Control CtrlObject;public string strText;}2.定义一个委托delegate void SetTextCallback(SetTextParam stParam);3.编写改变Text属性的函数private void SetText(SetTextParam stParam){ if (stParam.CtrlObject.InvokeRequired) stParam.CtrlObject.Inv 阅读全文

posted @ 2013-02-20 10:16 HOT SUMMER 阅读(337) 评论(0) 推荐(0) 编辑

导航