`

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#引入异步编程模型以来,`async/await`关键字和`Task.Run`可以更简洁地处理跨线程操作。通过将UI更新放入`await`后的任务中,我们可以确保它在正确的线程上运行。例如: ```csharp private async void ...

    C#跨线程访问控件

    在C#编程中,跨线程访问控件是一个常见的需求,特别是在UI(用户界面)更新和后台任务执行之间需要协调时。线程池和Action委托以及Control类的Invoke方法是解决这一问题的关键技术。让我们深入探讨一下这些概念及其...

    c#子线程操作UI控件的简单委托 包含带参数和不带参数源码

    本文将深入探讨如何在C#中使用委托实现子线程对UI控件的操作,包括带参数和不带参数的场景,并提供源码实例。 1. 跨线程操作UI控件的原理: 在多线程环境中,每个线程都有自己的上下文,而UI控件只在其创建的线程...

    C# 跨线程调用控件.zip

    为了解决这个问题,C#提供了跨线程调用控件的方法。本项目"**C# 跨线程调用控件.zip**"提供了一个很好的实例,展示了如何正确地实现这一功能。 首先,我们需要理解.NET中的线程模型。主线程是负责创建并管理UI的...

    C#跨线程处理控件实例

    本文将深入探讨“C#跨线程处理控件实例”,以VS2005环境下编写的一个多线程打字小游戏为例,讲解如何在不同线程间安全地操作UI组件。 首先,理解C#中的线程是非常重要的。线程是程序执行的独立路径,允许一个程序...

    c#多线程利用委托更新控件内容

    由于控件只能在其创建的线程中被访问,因此如果需要在其他线程中更新控件内容,需要使用委托(delegate)来实现跨线程调用。 下面是一个使用委托(delegate)更新控件内容的示例代码: 首先,定义一个委托...

    跨线程调用控件的四种方式.rar

    在C#编程中,跨线程调用控件是一个常见的需求,特别是在开发多线程应用程序时,为了确保UI(用户界面)的响应性和线程安全,我们需要正确地处理控件的访问。标题“跨线程调用控件的四种方式”涉及到的核心知识点包括...

    C#实现多线程操作控件

    这两个方法能够确保在正确的线程(即创建控件的线程,通常是主线程)上执行操作,避免了跨线程访问的问题。`Invoke`是同步的,会阻塞当前线程直到操作完成,而`BeginInvoke`则是异步的,它会立即返回,操作会在稍后...

    C#WinForm跨线程安全调用控件例程

    总结来说,C# WinForm应用程序中的跨线程安全调用控件是通过委托和适当的调用方法(如Invoke或BeginInvoke)来实现的。理解这些概念并正确使用,能够帮助开发者避免线程安全问题,同时保持程序的响应性和效率。在...

    跨线程调用控件示例

    在跨线程调用控件时,我们必须使用委托作为数据传递的载体,因为它们可以安全地在多个线程之间传递方法调用。委托本质上是类型安全的函数指针,允许我们传递方法作为参数或在事件处理中使用。 C#中,`Control....

    c# 委托访问listbox多线程操作

    ### C# 委托访问 ListBox 的多线程操作 #### 概述 在 C# 编程语言中,为了确保界面的响应性并避免在执行长时间运行的...- **UI 更新的最佳实践**:始终确保在 UI 线程中进行 UI 更新,以避免因跨线程访问引发的异常。

    C#跨窗体(Winform)调用控件(委托回调)

    当我们谈论“跨窗体”调用控件时,我们通常是指在一个窗体(Form)上操作的代码想要影响或与另一个窗体上的控件交互。在这个过程中,“委托”和“回调”扮演着关键的角色。本文将深入探讨这两个概念以及它们如何在C#...

    C# 通过委托和线程实现chart控件的实时更新

    BeginInvoke 方法将在控件的 UI 线程上执行委托,避免了跨线程访问控件的安全问题。 Chart 控件的实时更新 在我们的示例代码中,我们使用了 Chart 控件数组 chart11 和 mpanel 来存储 Chart 控件和表盘控件。在 ...

    C#Control.Invoke方法和跨线程访问控件共

    总的来说,`Control.Invoke`是C#中实现跨线程访问UI控件的关键工具,它确保了UI操作的安全性和线程合规性。正确理解和使用`Invoke`方法对于编写高效、健壮的多线程应用程序至关重要。同时,开发者还应注意在多线程...

    跨线程访问Windows窗体控件

    在Windows应用程序开发中,尤其是使用.NET Framework的Windows Forms平台,我们经常会遇到跨线程访问窗体控件的问题。这是因为Windows Forms控件默认是线程安全的,只能由创建它们的线程进行修改。如果尝试从其他...

    跨线程操作实例-Invoke()

    在C# Winform开发中,跨线程操作是常见的需求,特别是在UI界面与后台处理之间交互时。"跨线程操作实例-Invoke()"这个标题暗示了我们将在一个非UI线程(例如,后台线程)中修改UI元素,这是不被允许的,因为.NET ...

    双色球查询字典子线程查询以及跨线程访问控件

    本文将深入探讨C#中关于双色球查询字典子线程查询以及跨线程访问控件的相关知识点,这些知识点主要涉及线程安全、委托和事件处理。 首先,我们需要理解“双色球查询字典”可能是指一个存储双色球彩票数据的数据结构...

    C# 窗体之间的控件调用

    为了实现跨窗体的控件调用,可以使用`public`或`internal`访问修饰符暴露需要调用的控件,或者提供公共方法来间接访问。 5. **事件驱动编程**:在C#中,大部分交互是通过事件触发的。例如,当用户点击按钮时,对应...

    C# 线程中利用委托类型操作控件测试

    这样,实际的操作会由UI线程执行,避免了跨线程访问控件的问题。 C#中的`Control.Invoke`和`Control.BeginInvoke`方法就是用来实现这一目的的。`Invoke`方法会立即同步执行,而`BeginInvoke`则是异步执行。例如,...

    C#多线程与跨线程访问界面控件的方法

    在标题和描述中提到的C#多线程与跨线程访问界面控件,主要涉及以下几个核心知识点: 1. **线程创建**: - 创建新线程:在C#中,可以通过`Thread`类来创建和启动新线程。例如,`BtnLoadBinInformation`方法中,通过...

Global site tag (gtag.js) - Google Analytics