多线程-新人求思路 winform控件自动刷新

问题描述

新人求思路 winform控件自动刷新
需求:
定义自动刷新接口IAO,有若干控件(记为arc)实现该接口

包含arc的接口load时注册arc及其数据源的映射到某个集合(对控件采用弱引用,记为ard)

数据服务层更新数据后遍历集合 向需要进行UI更新的arc发送消息

窗体上的arc采用多线程异步处理更新操作(例:实现IAO的下拉列表arcombobox在收到消息后下拉框中的选项发生改变)

涉及的技术比较多 思路有点乱 控件与数据源的映射方式和与服务层交互的信息应该怎样定义都想不明白 希望各位高手能给些指点

解决方案

这个问题也不知道难倒了多少C#豪杰。比起MFC的界面刷新,在WINFORM中来实现多线程刷新真是很痛苦,故写此文。

多线程刷新界面主要用到多线程,委托,线程安全、事件等一系列高难度的C#操作。

关于委托和事件,这有一篇很易懂的文章:hi.baidu.com/anglecloudy/blog/item/a52253ee804d052f2df534ab.html

===============================================

先从一个简单的例子说起,是一个没有考虑线程安全的写法:

先在一个FORM类里面定义一个委托和事件:

  protected delegate void UpdateControlText1(string str);
//定义更新控件的方法
protected void updateControlText(string str)
{
this.lbStatus.Text = str ;
return;
}

在线程函数里面加上下面的内容

UpdateControlText1 update = new UpdateControlText1(updateControlText);//定义委托
this.Invoke(updateOK"");//调用窗体Invoke方法

这个线程函数必须是类的线程函数,这样用很方便,但有很高的局限性,下面来说个复杂的。

==============================================

先定义一个独立的类

public class MoreTime
{
public delegate void InvokeOtherThead( int i);//委托

    public InvokeOtherThead MainThread;//事件    public void WaitMoreTime()    {        for ( int i = 0 ; i < 20 ;i ++ )        {            Thread.Sleep( 2000 );            MainThread(i);//调用事件        }    }}

主函数

public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

    private void button1_Click( object sender EventArgs e)    {        MoreTime mt = new MoreTime();        mt.MainThread = new MoreTime.InvokeOtherThead(AddToList); //事件响应        ThreadStart start = new ThreadStart(mt.WaitMoreTime);//起动线程        Thread thread = new Thread(start);        thread.Start();    }    public void AddToList( int i)   //事件响应函数    {        if ( this .listBox1.InvokeRequired)        {            MoreTime mt = new MoreTime();            mt.MainThread = new MoreTime.InvokeOtherThead(AddToList);            this .Invoke(mt.MainThread new object [] { i});        }        else         {            listBox1.Items.Add(i.ToString());   //这里一定要是可以瞬时完成的函数        }    }}
时间: 2024-10-02 07:07:18

多线程-新人求思路 winform控件自动刷新的相关文章

C# winform控件问题

问题描述 用vs2010开发时如上面2图,当我按我F6生成解决方案时,winform控件会自动上移(图1变成了图2的样子),求大神们指导下这是什么原因导致的 解决方案 解决方案二:因为你现在看的视图是代码运行之前的解决方案三:你看看你代码里有没有更改这个控件大小或位置的代码.可能的位置在你的窗体构造函数或者控件的构造函数中.简单的方法是用检索功能检索控件名称,查看相关代码.解决方案四:二楼正解,应当是代码中更改了控件尺寸,可以去掉或更改成正确的值.解决方案五:引用2楼ajh99990的回复: 你

C# WinForm控件、自定义控件整理(大全)

转:http://www.cnblogs.com/top5/archive/2010/04/29/1724039.html 对C# WinForm开发系列收集的控件使用方面进行整理, 加入了一些文章, 不断补充充实, 完善这方面. 基础 - 常用控件 C# WinForm开发系列 - CheckBox/Button/Label/ProgressBar WinForm下CheckedListBox的数据绑定 Winform 下无闪烁走马灯效果实现 c#,winform,progressbar+la

在IE中使用VS.net WinForm控件

控件 在Visual Studio .net中,类似于Applet或ActiveX控件,WinForm控件可以嵌入IE中使用.嵌入IE的Windows窗体控件不要求注册,不需用户提示即可激活.我们可以很方便地实现一些WebForm中实现起来相对麻烦的交互操作,结合.net Remoting等技术访问后台数据库,则可生成功能强大而且美观的WebForm页面. 使用该技术,需要客户端安装.net FrameWork及IE 6.0,在Windows 2003中已经自带了.net FrameWork.

WinForm控件开发总结(四) 控件属性的串行化

前一篇文章介绍了常用的设计时Attribute.其中BrowsableAttribute,CategoryAttribute, DescriptionAttribute,DefaultPropertyAttribute,DefaultEventAttribute都是比较简单的,也是可 有可无,但是为了提供更好的用户体验这些Attribute最好不要省掉,如果你对这些Attribute还不熟悉, 可以参考我前一篇文章的描述或者查看MSDN,这里我就不在赘述了. 下来我们主要介绍一下Designer

[GduUI类库]开源分享:ListBox, ComboBox等Winform控件

问题描述 是的,又是GduUI类库.距离上次发布有一个多月时间了,类库主要做了以下几方面的更新:1.对发现的问题进行了修正,不足的地方进行了优化,相应地方添加了注释.2.对类库大部分控件,相应做出了Winless版本,即无句柄的,后面会再说明.3.类库增加了GMButton,GMCheckBox,GMRadioButton,GMListBox,GMComboBox五类实用的控件.照例先贴上前两个帖子的地址,有兴趣的可以再回顾一下看看,从这几个帖子可以大概看到类库是如何慢慢发展起来的.这次发帖的主

.Net WinForm 控件键盘消息处理剖析

在WinForm控件上我们可以看到很多关于键盘消息处理的方法,比如OnKeyDown, OnKeyPress, ProcessCmdKey, ProcessDialogKey,IsInputKey等等,那么这些方法是如何被组织的,每一个方法的具体含义又是什么哪?Win32的键盘消息又是如何到达控件上的这些方法的,本文将着重阐述这些问题,对.Net WinForm控件的键盘消息处理过程进行剖析.   1.      WinForm消息循环 大家都知道WinForm也是依赖于底层的消息机制的,通常我

c#扩展方法奇思妙用高级篇六:WinForm控件选择器

我们先看几个类图,深入认识一下我们常用的WinForm控件: 图1 ScrollableControl类图 图2 ButtonBase类图 图3 TextBoxBase类图 图4 ListControl类图 图5 Label类图 图6 其它常用 从图1中可以看出,Form与Button.Label一样,也是一个Control.

WinForm控件开发总结系列文章目录

WinForm控件开发总结(十二) 让控件处理导航键 WinForm控件开发总结(十一) 调试控件的设计时行为 WinForm控件开发总结(十) 为属性设置默认值 WinForm控件开发总结(九) 为属性提下拉式属性编辑器 WinForm控件开发总结(七) 为复杂属性的子属性提供编辑功能 WinForm控件开发总结(八) 为属性提供弹出式编辑对话框 WinForm控件开发总结(六) 控件属性类型转换器代码详解 WinForm控件开发总结(五) 为控件的复杂属性提供类型转换器 WinForm控件开

WinForm控件开发总结(十二) 让控件处理导航键

最近真的真的太忙了,以至于一个多月都没哟更新我的blog.昨天晚上,一个网上的朋友看了我的 ToolBox的文章,问我一个问题,他说如何让ToolBox控件也能响应键盘操作,也就是用Up,down按键来选 择工具箱控件里的Item,他添加了键盘事件,但是不起作用.一开始做这个控件的时候也只是演示一下控 件的制作过程,只用了很短的时间做了一个,只考虑了用鼠标选取,没有考虑键盘操作,我想要添加键盘 操作无非重载KeyDown事件,针对Up,Down做一些响应就可以了.可是添加了重载了OnKeyDow