首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

跨线程调用窗体控件

然而,一旦采用多线程,就需要理解 Windows 窗体中最重要的一条线程规则:除了极少数的例外情况,否则都不要在它的创建线程以外的线程中使用控件的任何成员。...这适用于其派生自 System.Windows.Forms.Control 的任何对象,其中几乎包括 UI 中的所有元素。所有的 UI 元素(包括表单本身)都是从 Control 派生的对象。...此外,这条规则的结果是一个被包含的控件(如,包含在一个表单中的按钮)必须与包含它控件位处于同一个线程中。也就是说,一个窗口中的所有控件属于同一个 UI 线程。...实际中,大部分 Windows 窗体应用程序最终都只有一个线程,所有 UI 活动都发生在这个线程上。这个线程通常称为 UI 线程。...这意味着您不能调用用户界面中任意控件上的任何方法,除非在该方法的文档说明中指出可以调用。该规则的例外情况(总有文档记录)非常少而且它们之间关系也不大。

1.3K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    如何在多线程中调用winform窗体控件

    由于 Windows 窗体控件本质上不是线程安全的。因此如果有两个或多个线程适度操作某一控件的状态(set value),则可能会迫使该控件进入一种不一致的状态。...于是在调试器中运行应用程序时,如果创建某控件的线程之外的其他线程试图调用控件,则调试器会引发一个 InvalidOperationException  本文用一个很简单的示例来讲解这个问题(在窗体上放一个...              {                 _TextBox.Text = _Value;             }         }     } } 解决办法二:通过委托安全调用...SetTextBoxValue();         }                         private delegate void CallSetTextValue();         //通过委托调用

    2.2K100

    C# 子窗体调用窗体中的方法(或多窗体之间方法调用)

    本文转载:http://www.csframework.com/archive/2/arc-2-20110805-1771.htm 文章侧重点主要是讨论“窗体”与“窗体”之间方法的调用,以及“MDI父窗体...”与“Chilid子窗体”之间如何相互的调用方法。...C# 子窗体调用窗体中的方法(或多窗体之间方法调用) 看似一个简单的功能需求,其实很多初学者处理不好的,很多朋友会这么写: C# Code: //父窗体是是frmParent,子窗体是frmChildA...: //错误的调用!!!!!!!!...假设我们的项目不断在扩展,需要将父窗体与子窗体分开在不同的模块,这段代码就完了!因为父窗体模块必须引用子窗体模块,而子窗体需要用到frmParent的,又要引用父窗体的模块!

    8.3K20

    Qt编写自定义控件48-面板窗体控件

    远超qwt集成的控件数量。 每个都可以独立成一个单独的控件,零耦合,每个控件一个头文件和一个实现文件,不依赖其他文件,方便单个控件以源码形式集成到项目中,较少代码量。...qwt的控件环环相扣,高度耦合,想要使用其中一个控件,必须包含所有的代码。...每个控件都有一个对应的单独的包含该控件源码的DEMO,方便参考使用。同时还提供一个所有控件使用的集成的DEMO。 每个控件的源代码都有详细中文注释,都按照统一设计规范编写,方便学习自定义控件的编写。...每个控件默认配色和demo对应的配色都非常精美。 超过130个可见控件,6个不可见控件。 部分控件提供多种样式风格选择,多种指示器样式选择。 所有控件自适应窗体拉伸变化。...不定期增加控件和完善控件,不定期更新SDK,欢迎各位提出建议,谢谢!

    1.5K30

    窗体UserForm——我也是

    首先,设置窗体界面: ?...所以,上面这种设计是不合适的,作为这个只需要对外传递某些数据的窗体来说,它的功能应该仅仅是对外传递数据,不依赖外部变量,不包含逻辑代码,它就是一个独立的对象,能够对外提供接口读取数据,这就是了。...窗体本身就是一种特殊的,只是它多了一个交互界面,的那些特性窗体是都具有的,所以,根据的设计方法,给这个窗体设置一个可以读取的属性UserName: '设置只读属性 Property Get UserName...外部普通模块调用的时候,就像是使用一个普通的一样: Sub TestUserFrom() Dim f As FInputName '创建窗体实例 Set f = New...,可以在其他任何需要的地方直接调用它,然后读取它设置的数据。

    80830

    使用Label标签控件模拟窗体标题的移动及窗体颜色不断变换

    为什么要使用这个ReleaseCapture函数,原因在于移动窗体标题时,需要释放对鼠标的捕捉,否则,就不能移动窗体标题。...SendMessage函数:该函数是用来给窗体发送Windows消息, 在本文中,该函数是模拟给非窗体客户区域(如窗体标题、最大化、最小化及关闭按钮区域)发送Windows消息,使特定区域能收到拖动窗体标题的消息...二、构建模拟移动窗体标题的应用程序,在这里我们使用了一个label(左边,label1),用来将鼠标移到该控件并拖动时,可以移动窗体, 另外一个label(右边,label2)则用来关闭窗体,如下图所示...label2_Click(object sender, EventArgs e) { this.Close(); } 其中,需要为关闭按钮填写显示“关闭”按钮的提示,因此需要使用ToolTip控件...三、窗体颜色变换 这里主要用到了一个变换彩虹颜色的算法,参考如下: public static Color Rainbow(float progress) { var div = (Math.Abs

    1.6K00

    winform 窗体实现增删改查(CRUD)窗体模式

    由于BaseForm一般需要在大多数的窗体中,而新增编辑数据窗体一般较为特殊一点,可以再增加一个基BaseEditForm,用来做新增编辑窗体的基,该基继承自BaseForm,工程代码如下所示。...编辑以及新增我们整合在一个窗体中,先看看该基的设计视图,我们在其中添加了3个按钮(常用的添加、保存、关闭按钮)。 ?...窗体的代码我大类采用了可重载的虚函数,留给子类窗体进行实现不同的处理操作,如窗体加载显示操作、显示数据到控件的操作、保存、新增等函数都是需要实现的,而调用逻辑以及一些通用的处理,则在基BaseEditForm...{             this.DialogResult = DialogResult.Cancel;             this.Close();         } 其中值得介绍的是,窗体控件数据清空在基窗体中通过遍历实现了通用的数据清空操作...另外,基窗体还实现了Tab键的转换,这个思路来源于即日嘎拉的代码,但由于是基实现,有些不同,他的放在每个具体的子类中,因此通用性有些限制。

    2.5K20
    领券