在线程中执行代码

说明:支持跨线程访问控件。

定义代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace PackageOperMgr.util
{
    /// <summary>
    /// 跨线程访问控件的委托
    /// </summary>
    public delegate void InvokeDelegate();

    /// <summary>
    /// 跨线程访问控件类
    /// </summary>
    public class InvokeUtil
    {
        /// <summary>
        /// 跨线程访问控件
        /// </summary>
        /// <param name="ctrl">Form对象</param>
        /// <param name="de">委托</param>
        public static void Invoke(Control ctrl, InvokeDelegate de)
        {
            if (ctrl.IsHandleCreated)
            {
                ctrl.BeginInvoke(de);
            }
        }

        /// <summary>
        /// 在线程中执行代码
        /// </summary>
        public static void ExecuteCode(Control ctrl, InvokeDelegate de)
        {
            new Thread(new ThreadStart(delegate()
            {
                InvokeUtil.Invoke(ctrl, de);
            })).Start();
        }
    }
}

如何使用:

InvokeUtil.ExecuteCode(this, new InvokeDelegate(delegate()
{
    //这里写您要执行的代码
    string s = "aa" + "bb"; //例子
    NextBtn.Enabled = false; //例子
}));

时间: 2024-10-11 08:57:35

在线程中执行代码的相关文章

用Handler的post()方法来传递线程中的代码段到主线程中执行

自定义的线程中是不能更新UI的,但是如果遇到更新UI的事情,我们可以用handler的post()方法来将更新UI的方法体,直接传送到主线程中,这样就能直接更新UI了.Handler的post()方法就是将Runnable中的代码段传送到主线程. 布局文件就是个textView,我就不贴了. 全部代码 package com.kale.handler; import android.app.Activity; import android.graphics.Color; import andro

使用HandlerThread让任务在子线程中执行

介绍 首先我们来看看为什么我们要使用HandlerThread?在我们的应用程序当中为了实现同时完成多个任务,所以我们会在应用程序当中创建多个线程.为了让多个线程之间能够方便的通信,我们会使用Handler实现线程间的通信. 下面我们看看如何在线程当中实例化Handler.在线程中实例化Handler我们需要保证线程当中包含Looper(注意:UI-Thread默认包含Looper). 为线程创建Looper的方法如下:在线程run()方法当中先调用Looper.prepare()初始化Loop

Java 中的守护(Daemon)线程中finally代码块是否执行的问题

http://www.cnblogs.com/luochengor/archive/2011/08/11/2134818.html 这篇文章应该是Thinking in Java 中文版中的一段,关于线程-守护线程(Daemon Thread)的介绍 可能是我理解de不好,我对书对于daemon thread 中的finally是否执行的介绍有点迷糊了,故自己写个方法测试之后才搞明白. 就拿书中的例子做进一步说明.先来看下原文:不看我的罗嗦,可以直接看文章结尾的结论. import java.u

C#如何将线程中的代码抛到主线程去执行

private SynchronizationContext mainThreadSynContext; //主线程 mainThreadSynContext = new WindowsFormsSynchronizationContext();//当前主线程没有UI mainThreadSynContext = SynchronizationContext.Current;//当前的主线程有UI mainThreadSynContext.Post(new SendOrPostCallback(

Qt 的线程与事件循环——可打印threadid进行观察槽函数到底是在哪个线程里执行,学习moveToThread的使用)

周末天冷,索性把电脑抱到床上上网,这几天看了 dbzhang800 博客关于 Qt 事件循环的几篇 Blog,发现自己对 Qt 的事件循环有不少误解.从来只看到现象,这次借 dbzhang800 的博客,就代码论事,因此了解到一些 Qt 深层的实现,虽然是在 Qt 庞大的构架里只算的是冰山的一角,确让人颇为收益. 从 dbzhang800 的博客中转载两篇关于事件循环的文章,放在一起,写作备忘. 再次提到的一点是:事件循环和线程没有必然关系. QThread 的 run() 方法始终是在一个单独

IOS GDC线程原理及代码实现

核心概念 同步和异步的区别  同步:在当前线程中执行 异步:在另一条线程中执行 GCD的队列可以分为2大类型  并发队列(Concurrent Dispatch Queue) 可以让多个任务并发(同时)执行(自动开启多个线程同时执行任务) 并发功能只有在异步(dispatch_async)函数下才有效 串行队列(Serial Dispatch Queue) 让任务一个接着一个地执行(一个任务执行完毕后,再执行下一个任务) 有4个术语比较容易混淆:同步.异步.并发.串行  同步和异步决定了要不要开

线程中涉及到的知识点总结

一.线程中涉及到知识的总结 1.进程: 就是正在运行的程序,分配内存让应用程序能够运行. 2.线程: 在一个进程中负责代码的执行,就是一个进程中执行的路径. 3.多线程: 就是在一个进程中多个执行路径同时执行. 4.线程中常用的方法. Thread(String name)----------------------初始化线程的名字 getName() ----------------------------------返回线程的名字 setName(String name)----------

Android中高效的显示图片之二——在非UI线程中处理图片

在“加载大图”文章中提到的BitmapFactory.decode*方法,如果源数据是在磁盘.网络或其它任何不是在内存中的位置,那么它都不应该在UI线程中执行.因为它的加载时间不可预测且依赖于一系列因素(磁盘读写速度.图片大小.CPU频率等).如果在主线程中执行这个操作,一旦它阻塞了主线程,就会导致系统ANR.本节介绍使用AsyncTask在后台处理图片和演示怎么处理并发问题. 一.使用一个AsyncTask AsyncTask类提供一个简易的方法在后台线程中执行一些任务并把结果发布到UI线程.

使用Handler在子线程中更新UI

Android规定只能在主线程中更新UI,如果在子线程中更新UI 的话会提示如下错误:Only the original thread that created a view hierachy can touch its view((只有原来的线程创建一个视图层次可以触摸它的视图). 只能在主线程中更新UI的原因是:android中相关的view和控件不是线程安全的,我们必须单独做处理. 有的时候需要再子线程中实现更新UI,下面介绍使用Handler实现线程通信的特点实现在子线程中更新UI. H