c# thread-提示“Label1不是从创建它的线程访问”,怎么修改,请问?

问题描述

提示“Label1不是从创建它的线程访问”,怎么修改,请问?

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace CallBackEx
{
public partial class Form1 : Form
{
public delegate void ExampleCallback(int lineCount,Label lb);
public Form1()
{
InitializeComponent();
}
public void CurrentNumber(int tempNumber, Label lb)
{
lb.Text = tempNumber.ToString();
}
private void button1_Click(object sender, EventArgs e)
{
ThreadWithData twd = new ThreadWithData(1, 100, this.label1, new ExampleCallback(CurrentNumber));
Thread td = new Thread(new ThreadStart(twd.RunMethod));
td.Start();
}

    private void button2_Click(object sender, EventArgs e)
    {
        ThreadWithData twd = new ThreadWithData(2, 200, this.label2, new ExampleCallback(CurrentNumber));
        Thread td = new Thread(new ThreadStart(twd.RunMethod));
        td.Start();
    }
    public class ThreadWithData
    {
        private int start=0;
        private int end=0;
        private ExampleCallback callback;
        private Label lb;

        public ThreadWithData(int start,int end,Label lb,ExampleCallback callback)
        {
            this.start = start;
            this.end = end;
            this.callback = callback;
            this.lb = lb;
        }

        public void RunMethod()
        {

            for (int i = start; i < end; i++)
            {
                Thread.Sleep(500);
                if (callback != null)
                {
                    callback(i,lb);
                }
            }
        }

    }
}

}

时间: 2024-11-08 20:25:44

c# thread-提示“Label1不是从创建它的线程访问”,怎么修改,请问?的相关文章

创建一个线程A,线程A还可以继续创建另外的线程b吗?

问题描述 各位大虾们 现在我已经创建了以个线程A. 我还想用这个线程A创建另外的一个线程b. 可以这样理解:线程b是由线程A创建的. 这样的话,线程b可以创建吗? 有没有代码可以参考的?[color=darkred][/color] 解决方案 首先,线程可以继续创建线程.给你看个例子:public class SimpleThreads {// Display a message, preceded by the name of the current threadpublic static v

c#-请教关于C#创建带参数线程的问题

问题描述 请教关于C#创建带参数线程的问题 我现在想创建一个多个线程来求两个矩阵的相乘,其中我把计算用的函数CalMatrix封装在类中方便创建线程时调用,类如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; using System.Threading; namespace

程序: 创建、压缩Access数据库并修改密码演示

access|程序|创建|数据|数据库|压缩 * --------------------------------------------* 程序: 创建.压缩Access数据库并修改密码演示* 设计: 红雨* --------------------------------------------Local lcMdbFile, lcRetuStrlcMdbFile = [C:\Temp\TestCreaMdbFile.mdb]lcPswd1 = [test1]lcPswd2 = [test2

简单使用BackgroundWorker创建多个线程的教程_实用技巧

BackgroundWorker是一个非常不错的线程控件,能避免界面假死,让线程操作你想要做的事,它学习起来很简单,但是能实现很强大的功能.发布这篇文章的目的是将最近学习到的共享出来,大家交流一下,当然我也是菜鸟,在这里你将学习到BackgroundWorker简单使用,停止,暂停,继续等操作,BackgroundWorker比起Thread和ThreadPool要简单太多,为了更方便在实际应用中使用,我使用的是winform,没有使用控制台程序. 在UI界面里拖动一个button和richTe

C#异常:线程间操作无效: 从不是创建控件“xxx”的线程访问它

C# WinForm开发中,这是一个比较常见的异常:线程间操作无效,从不是创建控件"xxx"的线程访问它.这个异常来源于.NET2的一个限制:工作线程不能访问窗口线程创建的控件.解决方法主要有两种,一种是在窗口线程中设置CheckForIllegalCrossThreadCalls = false :另一种方式比较麻烦,使用委托的方式调用Invoke方法. 比如窗口中有一个button1,我要新建一个线程访问到button1.第一种方式是:  代码如下 复制代码 this.button

通过Java动态创建ODBC数据源来访问DBF文件

通过Java动态创建ODBC数据源来访问DBF文件,需要用到registry,来修改注册表. 其实,主要是动态创建ODBC数据源,开始很简单,可以手工设置一次数据源,当然也可以通过程序直接生成,问题都不大.下面只说怎样修改. import com.ice.jni.registry.RegStringValue; import com.ice.jni.registry.Registry; import com.ice.jni.registry.RegistryKey; public class T

Win8.1安装iTunes软件提示“安装过程中出错,您的系统未被修改”解决方法

Win8.1安装iTunes软件提示"安装过程中出错,您的系统未被修改"解决方法   解决方法:出现这个错误是由于在win8.1中有一个"Devic Intall Service"服务没有启动引起的,只要我们正常启动他就可以了. 操作方法: 1.按下WIN+R键,然后输入 services.msc 回车; 2.在服务列表中找到"Devic Intall Service"服务;xitongcheng.com 3.双击该服务,在配置中点击"

MySQL数据定义语句:CREATE(创建)命令、ALTER(修改)命令、DROP(删除)

数据定义语言(DDL):包括CREATE(创建)命令.ALTER(修改)命令.DROP(删除)命令等. 注:MySQL version: 5.6.27 1.创建数据库和数据表: 数据库如果存在,则删除:(删除重要数据备份) mysql> DROP DATABASE IF EXISTS weloveshare; Query OK, 0 rows affected, 1 warning (0.00 sec) 删除或不存在weloveshare,则创建/*我们爱分享数据库*/ mysql> CREA

c语言多线程问题,快速创建多个线程!

问题描述 c语言多线程问题,快速创建多个线程! for(int i=10;i>0;i--) pthread_create(&pid,NULL,doit,NULL); 怎么创建出来的线程ID是重复的啊?应该怎么处理快速创建线程的时候,线程ID会复用? 解决方案 你用了一个pid,当然只能获得一个id了,改为: pthread pid[10]; for(int i=10;i>0;i--) pthread_create(&pid[i],NULL,doit,NULL); 解决方案二: