精华内容
下载资源
问答
  • winform跨线程

    2015-01-23 11:51:00
    winform中经常用到多线程,那么用多线程对控件进行赋值和修改的时候呢会出现类似“该控件不是当前线程创建”的错误信息,在winform中两种办法: 1.在加载事件中写这句话,其作用呢就是线程的异步调用 1 System....

    在winform中经常用到多线程,那么用多线程对控件进行赋值和修改的时候呢会出现类似“该控件不是当前线程创建”的错误信息,在winform中两种办法:

    1.在加载事件中写这句话,其作用呢就是线程的异步调用

     1 System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false; 

    2.用委托来实现线程对控件的赋值操作

    1 public delegate void OutDelegate(string text);
    2 public void OutText(string text)
    3 {
    4 txt.AppendText(text);
    5 txt.AppendText( "\t\n" );
    6 }
    7 OutDelegate outdelegate = new OutDelegate( OutText );
    8 this.BeginInvoke(outdelegate, new object[]{text});

     

     

    补充一句:

    在winform中创建带参数的线程,可以这么写

    1 Thread thread = new Thread(new ParameterizedThreadStart(getweathering));
    2 
    3 thread.Start(comboBox4.Text);
    4 
    5  
    6 
    7 void getweathering(string temptext)
    8 
    9 {}

     

    转载于:https://www.cnblogs.com/lsqandzy/p/4243795.html

    展开全文
  • 主要介绍了C#之WinForm跨线程访问控件,实例讲述了跨线程访问控件的简单实现方法与用法,需要的朋友可以参考下
  • C# Winform跨线程设置button的visibility

    千次阅读 2016-07-23 10:32:19
    C# Winform跨线程设置button的visibility
    private bool IsShow = true;
            delegate void SetVisibilityCallback(bool show);
    
            private void SetVisibilityThreadSafe(bool show)
            {
                if (btnCancelUsage.InvokeRequired)
                {
                    SetVisibilityCallback d = SetVisibilityThreadSafe;
                    btnCancelUsage.Invoke(d, show);
                }
                else
                {
                    btnCancelUsage.Visible = IsShow;
                }
            }
    展开全文
  • WinForm跨线程访问控件异常 最近做了个WinForm的小项目,遇到个简单的问题记录下。需求:点击”下载“,显示正在下载,下载完后更新状态为”ready“(要求用多线程,避免前台卡死)。 做法 新建一个线程,在新线程中...

    WinForm跨线程访问控件异常

    最近做了个WinForm的小项目,遇到个简单的问题记录下。需求:点击”下载“,显示正在下载,下载完后更新状态为”ready“(要求用多线程,避免前台卡死)。

    做法

    新建一个线程,在新线程中下在更新控件状态,报异常跨线程程访问控件(当然可以通过关闭跨线程访问控件检验解决,不鼓励这么做)。应该C#5.0版本添加的任务Task异步,这里用异步解决。

    Code

    1. 新建WinForm 项目,Form1添加控件如图
      1236909-20171227144327019-879168845.png

    2. 后台代码
        private void button1_Click(object sender, EventArgs e)
            {
                UpdateStatus();
            }
            private void button2_Click(object sender, EventArgs e)
            {
                UpdateStatusThread();
            }
    
            //运行会报异常
            private void UpdateStatusThread()
            {
                Thread th = new Thread(() =>
                {
                    string status = "ready";
                    Thread.Sleep(3000);
                    lbStatus.Text = status;
                });
    
                th.Start();
            }
            private void UpdateStatus()
            {
                new TaskFactory().StartNew(() =>
                {
                    string status = "ready";
                    Thread.Sleep(3000);
                    //将更新控件操作放在其内
                    this.Invoke(new Action(() =>
                    {
                        lbStatus.Text = status;
                    }));
                });
            }

    转载于:https://www.cnblogs.com/LoveTomato/p/8125678.html

    展开全文
  • winform跨线程操作控件

    千次阅读 2015-10-10 15:29:14
    winform跨线程操作控件,比如给文本框控件赋值 ;要操作什么控件就得在NormalSet方法中自己加类型判断 using System; using System.Collections.Generic; using System.Linq; using System.Text; using ...




    winform跨线程操作控件,比如给文本框控件赋值 ;要操作什么控件就得在NormalSet方法中自己加类型判断


    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace GameCommon
    {
        /// <summary>
        /// 公共类
        /// 创建人:长江股神
        /// 2015.10.10
        /// </summary>
        public class Common
        {
            #region 跨线程操作控件
    
            private delegate void setTexBox(Form winForm, Control control, string s);
            /// <summary>
            /// 跨线程控件赋值
            /// </summary>
            /// <param name="winForm"></param>
            /// <param name="control"></param>
            /// <param name="txt"></param>
            public static void ControlSetText(Form winForm, Control control, string txt)
            {
                if (control.InvokeRequired)//等待异步
                {
                    setTexBox fc = new setTexBox(InvokeSet);
                    winForm.Invoke(fc, new object[] { winForm, control, txt });
                }
                else
                {
                    NormalSet(winForm, control, txt);
                }
            }
            /// <summary>
            /// 委托主线程赋值
            /// </summary>
            /// <param name="winForm"></param>
            /// <param name="control"></param>
            /// <param name="txt"></param>
            private static void InvokeSet(Form winForm, Control control, string txt)
            {
                NormalSet(winForm, control, txt);
            }
            /// <summary>
            /// 正常赋值
            /// </summary>
            /// <param name="winForm"></param>
            /// <param name="control"></param>
            /// <param name="txt"></param>
            private static void NormalSet(Form winForm, Control control, string txt)
            {
                //不同控件采用不同赋值方法
                if (control is RichTextBox)
                {
                    ((RichTextBox)control).AppendText(txt);
                }
                else if (control is TextBox)
                {
                    ((TextBox)control).Text = txt;
                } 
            }
            #endregion
    
        }
    }
    


    使用方法:


    //使用
    Common.ControlSetText(this, 控件名, "文本");







    展开全文
  • WinForm跨线程访问控件泛型方法 /// <summary> /// 跨线程访问控件泛型方法 /// </summary> /// <typeparam name="t"></typeparam> /// <param name="cont"></p...
  • C# Winform 跨线程更新UI控件常用方法汇总 概述 C#Winform编程中,跨线程直接更新UI控件的做法是不正确的,会时常出现“线程间操作无效: 从不是创建控件的线程访问它”的异常。处理跨线程更新Winform ...
  • 可以这样认为:不能跨线程直接访问控件; 最简单的办法就是: 代码如下:using System.Windows.Forms; Parent.Invoke(new MethodInvoker(delegate { Parent.label1.Text = “成功” ; }));其中,“Parent”是主...
  • C# Winform 跨线程更新UI控件常用方法总结(转) 出处:http://www.tuicool.com/articles/FNzURb 概述 C#Winform编程中,跨线程直接更新UI控件的做法是不正确的,会时常出现“线程间操作无效: 从不是创建控件的线程...
  • C# Winform 跨线程更新UI控件常用方法总结(转) 出处:http://www.tuicool.com/articles/FNzURb 概述 C#Winform编程中,跨线程直接更新UI控件的做法是不正确的,会时常出现“线程间操作无效: 从不是创建控件的...
  • C# WinForm 跨线程访问控件 在做WinFrom开发的时候,经常会遇到跨线程访问控件的问题,即从不是创建控件的线程去访问控件。百度里面搜索,会有各种各样的解决方案。在诸多方案中,我认为没有一个方案是特别简单,...
  • Winform跨线程操作

    2018-05-15 11:51:47
    在我们常规开发中,经常会遇到需要跨窗体访问的情况,或者在使用多线程的时候需要跨线程访问数据,虽然有很多处理跨线程的方法,但是大多麻烦。 这为大家提供一个跨线程访问的方式。 Invoke(new Action(() =&...
  • .net 2.0以后加强了安全机制,不允许在winform中直接跨线程访问控件的属性,会提示错误“跨线程操作无效“。 提供几种方法解决这个问题 1. 设置CheckForIllegalCrossThreadCalls为False ...
  • 线程间操作无效: 从不是创建控件的线程访问它。当我们执行C#程序出现此错误提示时,可以采用委托的方法来解决,但是有个重要问题需要注意...本例程提供了跨线程安全调用控件的方法。
  • WINFORM跨线程访问控件

    2021-01-13 09:04:52
    //通过跨线程给控件赋值 private void btnExecute1_Click(object sender, EventArgs e) { Thread thread = new Thread(() => { for (int i = 0; i < 10; i++) { // this.lblR..
  • winform跨线程操作界面控件,一般用delegate比较多,不过写法都好麻烦。网上找到一个比较快捷的写法: tbxTemp1.Invoke((MethodInvoker)delegate { tbxTemp1.Text = "XXX"; }); 没有大段的声明或定义,很简洁。...
  • winform跨线程访问控件

    2018-10-30 15:00:00
    首先说下,.net 2.0以后加强了安全机制,不允许在winform中直接跨线程访问控件的属性。所以除了控件所在的线程外的线程调用会抛异常 (Cross-thread operation not valid:Control 'textBox1' accessed from a ...
  • 进行winform 开发我们在进行数据交换时避免不了使用多线程或异步方法,这样操作也将避免不了跨线程对控件进行操作(赋值、修改属性)。 下面通过一个测试说明一下问题 点击一个按钮异步对textbox进行赋值 运行...
  • WinForm跨线程访问解决

    千次阅读 2018-11-07 10:48:52
    解决控件跨线程访问的问题 public partial class MainFrm : Form { public MainFrm() { InitializeComponent(); //解决跨线程访问无效方式 //方法一:称之为-掩耳盗铃方法 // 真正项目中绝对不能这么做 //...
  • Winform跨线程操作控件

    2019-09-19 14:24:09
    出于安全考虑,Winform中默认不允许在一个线程中操作另一个线程中的控件,线程同时运行时,两个线程同时访问某一控件,两个线程之间可能会发生死锁。为了区别是否是创建该控件的线程访问该控件,Windows窗体控件中的...
  • 背景在我做WinForm开发的过程中,经常会遇到耗时操作或阻塞操作。他们会引发软件的卡顿甚至假死,严重影响软件的使用。因此,这类耗时或阻塞的操作...而在Winform中,跨线程修改UI界面同样是不被允许的。在子线程中...
  • 当不跨线程时,使用正常。使用子线程操作webBrowser控件时出现了一下错误。  子线程中对窗体上的控件操作是会出现异常,这是由于子线程和运行窗体的线程是不同的空间所导致的。对于一般的控件,当子线程操作控件...
  • 多个线程竞争读写同一个资源往往会造成意想不到的意外结果,UI界面也是一种资源,所以跨线程修改UI界面往往被加以限制。这里采用Task + MethodInvoker的方式完成跨线程对UI对的修改。
  • 背景 在我做WinForm开发的过程中,经常会遇到耗时操作或阻塞操作...而在Winform中,跨线程修改UI界面同样是不被允许的。在子线程中修改界面控件时Visual Studio会报出如下错误: 解决思路 .Net提供了很多跨..

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 416
精华内容 166
关键字:

winform跨线程