`

C#跨线程操作控件 带参数传递(转)

 
阅读更多
C#跨线程操作控件 带参数传递(转)
// 定义委托
                private delegate void DelegateWriteResult(string file, bool result);
        // 与定义的委托签名相同的函数,操作主线程控件
                private void WriteResult(string fileName, bool result)
                {
                    if (result)
                    {
                                 
                        ListViewItem thisListItem = new ListViewItem();
                                      
                        thisListItem.ForeColor = Color.White;
                                      
                        thisListItem.BackColor = Color.DarkGreen;
                                       
                        thisListItem.SubItems[0].Text = fileName;
                                       
                        thisListItem.SubItems.Add("成功");
                                      
                        lvResultList.Items.Add(thisListItem);
                             
                    }
                    else
                    {
                                        
                        ListViewItem thisListItem = new ListViewItem();
                                       
                        thisListItem.ForeColor = Color.White;
                                       
                        thisListItem.BackColor = Color.Red;
                                      
                        thisListItem.SubItems[0].Text = fileName;
                                       
                        thisListItem.SubItems.Add("失败");
                                       
                        lvResultList.Items.Add(thisListItem);
                               
                    }
                     
                }
              
        // 启动线程
        // 线程执行函数
                private void CompressAll()
                {
                    // 判断是否需要Invoke,多线程时需要
                    if (this.InvokeRequired)
                    {
                        // 通过委托调用写主线程控件的程序,传递参数放在object数组中
                        this.Invoke(new DelegateWriteResult(WriteResult),new object[] { "item", true });
                    }
                    else
                    {
                        // 如果不需要委托调用,则直接调用
                        this.WriteResult("item", true);
                    }
                }

                private void button1_Click_1(object sender, EventArgs e)
                {
                    Thread workThread = new Thread(new ThreadStart(CompressAll));
                    // 设置为背景线程,主线程一旦推出,该线程也不等待而立即结束
                    workThread.IsBackground = true;
                    workThread.Start();

                }
分享到:
评论

相关推荐

    跨类跨线程访问C#源代码

    在C#中,跨类跨线程访问UI线程控件是一个常见的需求。以下是几种常用的方法: 委托(Delegate):委托...以上是一些常见的C#跨类跨线程访问UI线程控件的技术和方法。具体使用哪种方法取决于你的应用程序的需求和架构。

    C#子线程更新UI控件的方法实例总结

    跨线程更新UI控件的常用方法有两种: 1.使用控件自身的invoke/BeginInvoke方法 2.使用SynchronizationContext的Post/Send方法更新 具体实现如下: 1.使用控件自身的invoke/BeginInvoke方法 Control类实现了ISyn

    C#微软培训资料

    第六章 类 型 转 换 .48 6.1 隐式类型转换 .48 6.2 显式类型转换 .53 6.3 小 结 .56 第七章 表 达 式 .58 7.1 操 作 符 .58 7.2 算术操作符和算术表达式.59 7.3 赋值操作符和赋值表达式.64 7.4 关系...

    亮剑.NET深入体验与实战精要2

    因pdf的容量过大分4个压缩包打包,还有一个源码另外下载。 《.NET深入体验与实战精要》作者身为从事.NET一线开发的资深开发专家,常年耕耘...15.5.14 使用视图代替跨库操作 572 15.5.15 尽量避免大事务操作 572 15.5.16...

    亮剑.NET深入体验与实战精要3

    因pdf的容量过大分4个压缩包打包,还有一个源码另外下载。 《.NET深入体验与实战精要》作者身为从事.NET一线开发的资深开发专家,常年耕耘...15.5.14 使用视图代替跨库操作 572 15.5.15 尽量避免大事务操作 572 15.5.16...

    Google Android SDK开发范例大全(完整版)

    擅长嵌入式系统软件设计、J2ME游戏开发、Android开发,以及J2EE、JSP、Servlet、JavaBeans、PHP、C#等程序语言,熟悉面向对象技术与Eclipse、Netbeans开发工具,积累多年大型项目开发、跨系统整合经验。 目录 第1...

Global site tag (gtag.js) - Google Analytics