入门--------------------------------------------------------------------------------
  概述与概念
    一个C#程序开始于一个单线程,这个单线程是被CLR和操作系统(也称为“主线程”)自动创建。

  创建和开始使用多线程
    public Window1()
    {
        //主线程
        //Code……
        //使用匿名方法来启动子线程
        Thread t = new Thread(delegate() {Code……});
        t.Start();
    }

子进程创建实例
    //1.创建子线程
    public Window1()
    {
        //创建子进程
        Thread threadA = new Thread(new ThreadStart(WorkMethod));
        threadA.Start();
    }
    //子进程启动程序
    void WorkMethod()
    {
        this.textBox1.Dispatcher.Invoke(DispatcherPriority.Normal, (ThreadStart)delegate
        {
            textBox1.AppendText(Environment.NewLine);
            this.textBox1.AppendText("子线程执行完成!");
        });
    }

//2.使用匿名委托来启动子线程
    public Window1()
    {
        Thread t = new Thread(delegate() {
            this.textBox1.Dispatcher.Invoke(DispatcherPriority.Normal, (ThreadStart)delegate
            {
                textBox1.AppendText(Environment.NewLine);
                this.textBox1.AppendText("子线程执行完成!");
            });
        });
        t.Start();
    }

//3.使用匿名委托来启动子线程
    public Window1()
    {
        InitializeComponent();
        textBox1.AppendText("主线程执行完成");
        new Thread(() =>
        {
            this.Dispatcher.Invoke(new Action(() =>
            {
                textBox1.AppendText(Environment.NewLine);
                textBox1.AppendText("子线程执行完成");
            }));
        }).Start();
    }

线程同步基础--------------------------------------------------------------------------------
  同步要领
  锁和线程安全
    //将当前线程阻塞指定的时间
    Thread.Sleep(TimeSpan.FromSeconds(30));

  Interrupt 和 Abort
  线程状态
  等待句柄
  同步环境

使用多线程--------------------------------------------------------------------------------
  单元模式和Windows Forms
  BackgroundWorker类
  ReaderWriterLock类
  线程池
  异步委托
  计时器
    public Window1()
    {
        //计时器 SetTimeInterval
        System.Windows.Threading.DispatcherTimer t = new System.Windows.Threading.DispatcherTimer();
        t.Interval = new TimeSpan(0, 0, 0, 0, 100);
        t.Tick += new EventHandler(timer_Interval);
        t.Start();
    }
    public Window1()
    {
        //计时器 SetTimeOut
        new System.Threading.Timer(new TimerCallback(timer_Callback), this, 5000, 0);
    }
  局部储存

高级话题--------------------------------------------------------------------------------
  非阻止同步
  Wait和Pulse
  Suspend和Resume
  终止线程

同步线程实例
    public Window1()
    {
        InitializeComponent();
        this.WindowStartupLocation = WindowStartupLocation.CenterOwner;

this.textBox1.Dispatcher.Invoke(DispatcherPriority.Normal, (ThreadStart)delegate
        {
            textBox1.AppendText(Environment.NewLine);
            this.textBox1.AppendText("同步线程执行完成!");
        });
    }
    异步线程实例
    public Window1()
    {
        textBox1.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (Action)(() =>
        {
            textBox1.AppendText(Environment.NewLine);
            textBox1.AppendText("异步线程执行完成");
        }));
    }
    线程呈现控件实例-可传参数
    public Window1()
    {
        InitializeComponent();
        System.Windows.Threading.DispatcherTimer t = new System.Windows.Threading.DispatcherTimer();
        t.Interval = new TimeSpan(0, 0, 0, 0, 1000);
        t.Tick += new EventHandler(Dispatcher_Timer);
        t.Start();
    }
    private delegate void DispatcherDelegate(string msg);
    private void OutPut(string msg)
    {
        textBox1.Dispatcher.Invoke(new DispatcherDelegate(DelegateMethod), msg);
    }
    private void DelegateMethod(string msg)
    {
        textBox1.AppendText(msg);
        textBox1.AppendText(DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"));
        textBox1.AppendText(Environment.NewLine);
    }
    void Dispatcher_Timer(object sender, EventArgs e)
    {
        OutPut("控件呈现:");
    }
    线程呈现控件实例-使用匿名委托
    public Window1()
    {
        InitializeComponent();
        this.WindowStartupLocation = WindowStartupLocation.CenterOwner;
        System.Windows.Threading.DispatcherTimer t = new System.Windows.Threading.DispatcherTimer();
        t.Interval = new TimeSpan(0, 0, 0, 0, 1000);
        t.Tick += new EventHandler(Dispatcher_Timer);
        t.Start();
    }
    void Dispatcher_Timer(object sender, EventArgs e)
    {
        textBox1.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (Action)(() =>
        {
            textBox1.AppendText("控件呈现:");
            textBox1.AppendText(DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"));
            textBox1.AppendText(Environment.NewLine);
        }));
    }
    线程呈现控件实例-匿名方法并返回参数
    public Window1()
    {
        InitializeComponent();
        System.Windows.Threading.DispatcherTimer t = new System.Windows.Threading.DispatcherTimer();
        t.Interval = new TimeSpan(0, 0, 0, 0, 1000);
        t.Tick += new EventHandler(Dispatcher_Timer);
        t.Start();
    }
    void Dispatcher_Timer(object sender, EventArgs e)
    {
        string strmsg = (string)textBox1.Dispatcher.Invoke(new Func<string>(() =>
        {
            textBox1.AppendText("控件呈现:");
            textBox1.AppendText(DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss"));
            textBox1.AppendText(Environment.NewLine);
            return textBox1.Text;
        }));
    }

线程:主线程、子线程 同步线程、异步线程 单线程、多线程 System.Threading与System.Windows.Threading的更多相关文章

  1. 使用C++11 开发一个半同步半异步线程池

    摘自:<深入应用C++11>第九章 实际中,主要有两种方法处理大量的并发任务,一种是一个请求由系统产生一个相应的处理请求的线程(一对一) 另外一种是系统预先生成一些用于处理请求的进程,当请 ...

  2. 使用C++11实现一个半同步半异步线程池

    前言 C++11之前我们使用线程需要系统提供API.posix线程库或者使用boost提供的线程库,C++11后就加入了跨平台的线程类std::thread,线程同步相关类std::mutex.std ...

  3. c++11 实现半同步半异步线程池

    感受: 随着深入学习,现代c++给我带来越来越多的惊喜- c++真的变强大了. 半同步半异步线程池: 事实上非常好理解.分为三层 同步层:通过IO复用或者其它多线程多进程等不断的将待处理事件加入到队列 ...

  4. (原创)C++半同步半异步线程池2

    (原创)C++半同步半异步线程池 c++11 boost技术交流群:296561497,欢迎大家来交流技术. 线程池可以高效的处理任务,线程池中开启多个线程,等待同步队列中的任务到来,任务到来多个线程 ...

  5. Python 中的进程、线程、协程、同步、异步、回调

    进程和线程究竟是什么东西?传统网络服务模型是如何工作的?协程和线程的关系和区别有哪些?IO过程在什么时间发生? 一.上下文切换技术 简述 在进一步之前,让我们先回顾一下各种上下文切换技术. 不过首先说 ...

  6. C++11 半同步半异步线程池的实现

    #include <list> #include <mutex> #include <thread> #include <condition_variable ...

  7. 关于GCD同步组实现多个异步线程的同步执行中的注意点

    在App开发中经常会遇到多个线程同时向服务器取数据, 如果每个线程取得数据后都去刷新UI会造成界面的闪烁 也有可能出现部分数据还没有获取完毕造成程序crash 之前在网上看到很多是利用dispatch ...

  8. 安卓 异步线程更新Ui

    异步跟新UI: 1.handler+Thread(runnable):如果handler和Thread都写在了一个Java文件中,就不说了,如果runnable定义在了一个单独的类文件中,可以通过在构 ...

  9. Erlang运行时中的无锁队列及其在异步线程中的应用

    本文首先介绍 Erlang 运行时中需要使用无锁队列的场合,然后介绍无锁队列的基本原理及会遇到的问题,接下来介绍 Erlang 运行时中如何通过“线程进度”机制解决无锁队列的问题,并介绍 Erlang ...

  10. Spring Boot系列二 Spring @Async异步线程池用法总结

    1. TaskExecutor Spring异步线程池的接口类,其实质是java.util.concurrent.Executor Spring 已经实现的异常线程池: 1. SimpleAsyncT ...

随机推荐

  1. 【iOS开发-91】GCD的同步异步串行并行、NSOperation和NSOperationQueue一级用dispatch_once实现单例

    (1)GCD实现的同步异步.串行并行. --同步sync应用场景:用户登录,利用堵塞 --串行异步应用场景:下载等耗时间的任务 /** * 由于是异步.所以开通了子线程.可是由于是串行队列,所以仅仅须 ...

  2. 报错:Validation failed for one or more entities. See 'EntityValidationErrors' property for more details.

    在保存数据的时候报这个错误,知道是验证错误,但到底是哪个属性验证错误呢? →打断点,运行,观察程序出错的地方→在出错的部分添加try...catch语句块→添加监视,输入((System.Data.E ...

  3. C语言控制结构

    C语言流程控制 一.流程控制结构 (1)顺序结构:按书写顺序执行每一条语句. (2)选择结构:对给定的条件进行判断,根据判断结果决定执行哪一段代码. (3)循环结构:在给定条件成立的情况下,反复执行某 ...

  4. iOS-Xcode必备插件XAlign:瞬间优化你的代码

    今天向大家介绍一个非常好用的Xcode代码编辑插件,这个插件可以很快速地使代码对齐,有3种模式:“=”对齐.宏定义对齐和属性对齐 XAlign效果图 1.“=”对齐   2.宏定义对齐     3.属 ...

  5. C#编程(十五)----------只读字段

    只读字段 当字段声明中含有 readonly 修饰符时,该声明所引入的字段为只读字段.给只读字段的直接赋值只能作为声明的组成部分出现,或在同一类中的实例构造函数或静态构造函数中出现.(在这些上下文中, ...

  6. Ant build.xml

    Ant的概念可能有些读者并不连接什么是Ant以及入可使用它,但只要使用通过Linux系统得读者,应该知道make这个命令.当编译Linux内核及一些软件的源程序时,经常要用这个命令.Make命令其实就 ...

  7. Android: INSTALL_FAILED_UPDATE_INCOMPATIBLE

    from://http://xusaomaiss.iteye.com/blog/393296 在反复安装android apk的时候,有的时候可能会遇到adb install错误,内容是:Failur ...

  8. WordPress主题开发:开启导航菜单功能

    步骤一:开启导航菜单功能 <?php /* register_nav_menu( $location, $description ) 函数功能:开启导航菜单功能 @参数 string $loca ...

  9. .NET:不要使用扩展方法扩展Object对象。

    C#的扩展方法算是一种Minin(掺入)机制,掺入方法有其合理的使用场景,这里说说一种不好的使用场景(个人意见):不要使用扩展方法扩展Object对象.扩展Object会对所有类型的示例有侵入,特别是 ...

  10. lemon OA 我长时间经历的第一个开源项目

    对于原作者来说, 他长时间运营了一个项目,lemon OA .目前,八百多star.在运营这个项目的过程中,我想说,他成了activiti 目前国内比较牛逼的几个人.还有 spring securit ...