日期:2014-05-17  浏览次数:20868 次

请教c#多线程操作更新控件的简便方法,受不了委托了。。。
为了安全在多线程更新控件,我没有使用System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
而选择了委托。但有时一个程序写下,通篇的委托代码不厌其烦。。。。。

delegate void MyThreadLB(ListBox lb, string msg);
        delegate void MyThreadCB(ComboBox cb, List<string> list);
        delegate void UpdateTB(TextBox tb, string msg);
......
//几乎每个控件都要弄一个委托,异常异常的麻烦!!!!!


我的程序大多数是后台线程执行查询、运算等,前台要保持响应状态
不知道有什么简洁的方案,远离不可计数的委托。

谢谢!!!!!

------解决方案--------------------
谁让你定义这些委托的?
Action和Func不就可以了。
------解决方案--------------------
lambda
------解决方案--------------------
唉。。居然一个控件定义一个委托,为何不定义一个通用的?
------解决方案--------------------
自带的泛型委托类型Action和Func;
lambda表达式;
或者定义一个通用的委托类型delegate void CallbackFuc(Control c,params object[] objs)
------解决方案--------------------
公历→农历
2013年06月05日
双子座
二〇一三年四月廿七
癸巳〖蛇〗 丁巳月 壬寅日 庚戌时
------解决方案--------------------
this.SafeInvoke(() =>
                {
                    comboBox1.Enabled = true;
                }
            )
这个lambda就是Action()的语法糖效果,

编译后就是Action(无参版)
------解决方案--------------------
Action是用来做什么的呢?
Control.BeginInvoke(new Action())不就完了?