- 浏览: 204374 次
- 性别:
- 来自: 成都
文章分类
- 全部博客 (231)
- C++学习 (41)
- vc学习 (25)
- vc异常 (4)
- Flex (2)
- Ext (0)
- java学习笔记 (15)
- mysql学习笔记 (1)
- ibatis学习笔记 (7)
- struts1学习笔记 (1)
- hibernate学习笔记 (3)
- javascript学习笔记 (8)
- eclipse快捷键 (2)
- 英语学习 (1)
- cmd (1)
- eclipse 配置 (2)
- 其他 (4)
- JAVASE (34)
- firefox (1)
- linux (8)
- Apache (6)
- cms (22)
- jsuc (10)
- html (3)
- css (1)
- 作图 (2)
- vs2012 (2)
- 编码转换 (12)
- work_unicode (1)
- work_webbrowser (1)
- work_trade_quotes_login (1)
- c#学习 (38)
- wpf学习 (31)
- wpf快速学习 (1)
- VB学习 (1)
- NSIS (4)
- log4cpp (3)
- 学习web (1)
- 经验 (1)
- c_汇编 (1)
最新评论
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(); }
发表评论
-
byte数组直接输出
2016-07-19 11:38 1249byte数组直接输出 BitConverter.ToStrin ... -
wfi:WindowsFormsHost焦点设置
2016-07-05 17:56 580<wfi:WindowsFormsHost> ... -
x:Name
2016-04-25 10:44 450由于“Dameer”是在同一程序集中实现的,您必须设置 x:N ... -
WindowsFormsHost的使用注意
2016-04-25 10:24 1347一使用 1 引用 2 xmlns:wfi ="clr ... -
TextBox滚动条
2016-04-22 16:51 657<TextBox Grid.Row="1& ... -
TextBlock滚动条
2016-04-22 16:49 453<ScrollViewer Name="s ... -
C#_WPF_WPF用户控件库
2016-04-12 11:37 798新建项目》window桌面》WPF用户控件库 -
DependencyProperty.UnsetValue_WPF涉及到资源的嵌套引用,被引用的资源要定义在引用的资源前面
2015-10-27 15:09 1992错误 1 “{DependencyProperty.Unset ... -
string格式的日期时间字符串转为DateTime类型
2015-08-05 14:22 963string格式的日期时间字符串转为DateTime类型 / ... -
checkbox
2015-07-28 17:18 554private void Chec ... -
自定义DataGrid样式
2015-06-26 22:03 747<ResourceDictionary xmlns=&q ... -
x:Name x:Key Name区别
2015-06-25 15:40 597x:Name x:Key Name区别 1、x:Key 只 ... -
work_代码添加
2015-06-23 17:15 507<UserControl x:Class=" ... -
FindName和VisualTreeHelper
2015-06-19 13:23 756int iCount = this.dataGridCan ... -
理解WPF中的视觉树和逻辑树(转载)
2015-06-19 13:00 586理解WPF中的视觉树和逻辑树 理解WPF中的 ... -
理解WPF中的视觉树和逻辑树(转载)
2015-06-19 12:58 1681理解WPF中的视觉树和逻 ... -
GetEnumerator
2015-06-19 12:39 651IEnumerator enumerator = this ... -
资源文件获取配置
2015-06-18 16:03 369object obj = Application.Curren ... -
Pack URI
2015-06-18 15:41 685主要用来定位 资源文 ... -
wpf学习之ObservableCollection<T>相关知识
2015-04-23 11:10 3305本篇学习了ObservableCollection<T& ...
相关推荐
自从C#引入异步编程模型以来,`async/await`关键字和`Task.Run`可以更简洁地处理跨线程操作。通过将UI更新放入`await`后的任务中,我们可以确保它在正确的线程上运行。例如: ```csharp private async void ...
在C#编程中,跨线程访问控件是一个常见的需求,特别是在UI(用户界面)更新和后台任务执行之间需要协调时。线程池和Action委托以及Control类的Invoke方法是解决这一问题的关键技术。让我们深入探讨一下这些概念及其...
本文将深入探讨如何在C#中使用委托实现子线程对UI控件的操作,包括带参数和不带参数的场景,并提供源码实例。 1. 跨线程操作UI控件的原理: 在多线程环境中,每个线程都有自己的上下文,而UI控件只在其创建的线程...
为了解决这个问题,C#提供了跨线程调用控件的方法。本项目"**C# 跨线程调用控件.zip**"提供了一个很好的实例,展示了如何正确地实现这一功能。 首先,我们需要理解.NET中的线程模型。主线程是负责创建并管理UI的...
本文将深入探讨“C#跨线程处理控件实例”,以VS2005环境下编写的一个多线程打字小游戏为例,讲解如何在不同线程间安全地操作UI组件。 首先,理解C#中的线程是非常重要的。线程是程序执行的独立路径,允许一个程序...
由于控件只能在其创建的线程中被访问,因此如果需要在其他线程中更新控件内容,需要使用委托(delegate)来实现跨线程调用。 下面是一个使用委托(delegate)更新控件内容的示例代码: 首先,定义一个委托...
在C#编程中,跨线程调用控件是一个常见的需求,特别是在开发多线程应用程序时,为了确保UI(用户界面)的响应性和线程安全,我们需要正确地处理控件的访问。标题“跨线程调用控件的四种方式”涉及到的核心知识点包括...
这两个方法能够确保在正确的线程(即创建控件的线程,通常是主线程)上执行操作,避免了跨线程访问的问题。`Invoke`是同步的,会阻塞当前线程直到操作完成,而`BeginInvoke`则是异步的,它会立即返回,操作会在稍后...
总结来说,C# WinForm应用程序中的跨线程安全调用控件是通过委托和适当的调用方法(如Invoke或BeginInvoke)来实现的。理解这些概念并正确使用,能够帮助开发者避免线程安全问题,同时保持程序的响应性和效率。在...
在跨线程调用控件时,我们必须使用委托作为数据传递的载体,因为它们可以安全地在多个线程之间传递方法调用。委托本质上是类型安全的函数指针,允许我们传递方法作为参数或在事件处理中使用。 C#中,`Control....
### C# 委托访问 ListBox 的多线程操作 #### 概述 在 C# 编程语言中,为了确保界面的响应性并避免在执行长时间运行的...- **UI 更新的最佳实践**:始终确保在 UI 线程中进行 UI 更新,以避免因跨线程访问引发的异常。
当我们谈论“跨窗体”调用控件时,我们通常是指在一个窗体(Form)上操作的代码想要影响或与另一个窗体上的控件交互。在这个过程中,“委托”和“回调”扮演着关键的角色。本文将深入探讨这两个概念以及它们如何在C#...
BeginInvoke 方法将在控件的 UI 线程上执行委托,避免了跨线程访问控件的安全问题。 Chart 控件的实时更新 在我们的示例代码中,我们使用了 Chart 控件数组 chart11 和 mpanel 来存储 Chart 控件和表盘控件。在 ...
总的来说,`Control.Invoke`是C#中实现跨线程访问UI控件的关键工具,它确保了UI操作的安全性和线程合规性。正确理解和使用`Invoke`方法对于编写高效、健壮的多线程应用程序至关重要。同时,开发者还应注意在多线程...
在Windows应用程序开发中,尤其是使用.NET Framework的Windows Forms平台,我们经常会遇到跨线程访问窗体控件的问题。这是因为Windows Forms控件默认是线程安全的,只能由创建它们的线程进行修改。如果尝试从其他...
在C# Winform开发中,跨线程操作是常见的需求,特别是在UI界面与后台处理之间交互时。"跨线程操作实例-Invoke()"这个标题暗示了我们将在一个非UI线程(例如,后台线程)中修改UI元素,这是不被允许的,因为.NET ...
本文将深入探讨C#中关于双色球查询字典子线程查询以及跨线程访问控件的相关知识点,这些知识点主要涉及线程安全、委托和事件处理。 首先,我们需要理解“双色球查询字典”可能是指一个存储双色球彩票数据的数据结构...
为了实现跨窗体的控件调用,可以使用`public`或`internal`访问修饰符暴露需要调用的控件,或者提供公共方法来间接访问。 5. **事件驱动编程**:在C#中,大部分交互是通过事件触发的。例如,当用户点击按钮时,对应...
这样,实际的操作会由UI线程执行,避免了跨线程访问控件的问题。 C#中的`Control.Invoke`和`Control.BeginInvoke`方法就是用来实现这一目的的。`Invoke`方法会立即同步执行,而`BeginInvoke`则是异步执行。例如,...
在标题和描述中提到的C#多线程与跨线程访问界面控件,主要涉及以下几个核心知识点: 1. **线程创建**: - 创建新线程:在C#中,可以通过`Thread`类来创建和启动新线程。例如,`BtnLoadBinInformation`方法中,通过...