C#线程调用

一.线程的优点

1.服务器 一般负载的情况下 线程可以提高效率;

2.使用线程执行的代码出现故障不会影响主程序,提高程序稳定和可靠性。

二.线程的创建及其常用属性

1.线程创建

ThreadStart ts1 = new ThreadStart(function2);//线程定义 执行

Thread t1 = new Thread(ts1);

t1.Start();

或者

Thread t1=new Thread(new ThreadStart(function2));

t1.Start();

2.线程常用属性

Priority 获取或设置,线程优先级

IsBackgroud 获取或设置,是否为后台线程

Abort() :终止线程

Start() 开始线程

三.程序实例 

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

namespace Thread2
{
    class Program
    {
        static void function1()
        {
            for (int i = 0; i < 40; i++)
            {
                Console.WriteLine(i);
            }
        }
        static void function2()
        {
            for (int i = 41; i <200; i++)
            {
               
                Console.WriteLine(i);
                int c = 2;
                int x = 0;
                int y = c / x;
            }
        }
        static void function3()
        {
            for (int i = 200; i < 205; i++)
            {
                Console.WriteLine(i);
                //int c = 2;
                //int x = 0;
                //int y = c / x;

}
        }
        static void Main(string[] args)
        {
            Console.WriteLine("Main begin !");

ThreadStart ts = new ThreadStart(function1);//线程定义 执行
            Thread t = new Thread(ts);
            t.Priority = ThreadPriority.Highest;
            t.Start();

Console.WriteLine("Main end!");

ThreadStart ts1 = new ThreadStart(function2);//线程定义 执行
            Thread t1 = new Thread(ts1);
            //t1.Priority = ThreadPriority.Highest;
            //t1.IsBackground = true;//没执行完 主程序也退出
            t1.Start();

function3();//直接执行

Console.WriteLine("Main1111 end!");
        }

}
}

C#线程调用

时间: 2024-11-29 02:39:49

C#线程调用的相关文章

async 与 await 线程调用顺序

用async做一个多线程下载并在datagridview中即时更新,运行时在达到4个线程同时下载时界面卡顿,多次尝试后是不知道async与await线程调用顺序造成. 进入async方法后在调用await之前代码都在主线程(调用线程)中运行,调用await时及之后的async方法代码将另起线程运行该部分代码,而主线程在遇到await后回到主线程继续执行async后的代码. 将async方法通过声明委托后用begininvoke调用后解决.

Atitit.swt&#160;线程调用ui控件的方法

Atitit.swt 线程调用ui控件的方法 1 SwingUtilities.invokeLater1 2 display.asyncExec方法1 3  display.timerExec(500,timer);2 4 .但有时候并不一定要程序执行时就要定时检测,有时需要外部事情激发这就出现了第2种解决方案,写一个内置类,可以放在事件监听的方法中,然后激发:2 5 参考3 1   SwingUtilities.invokeLater SwingUtilities.invokeLater(ne

python获得线程调用函数的返回值

threading.Thread 并没有显式的提供获取线程调用函数返回值的方法,需求自己实现. 使用数据库是一个办法: 可以让子线程将数据写到数据库中,消费线程再去数据库中读取数据: 如果不想用数据库,可以使用类的全局变量来做传递, 示例代码如下: import os import threading class SubThread(): data = {} def __init__(self): ... def execute_func(self, key): # 执行各种操作 ... ret

如何跨线程调用Windows窗体控件

通过一个子线程来操作主线程中的控件,但是,这样作会出现一个问题(如图1所示),就是TextBox控件是在主线程中创建的,在子线程中并没有对其进行创建,也就是从不是创建控件的线程访问它.那么,如何解决跨线程调用Windows窗体控件呢?可以用线程委托实现跨线程调用Windows窗体控件.下面将上一个例子进行一下改动.代码如下: using System; using System.Collections.Generic; using System.ComponentModel; using Sys

C#跨线程调用

项目上线测试时客户提出表单跳转到指定位置(表单比较长).当时以为这个就是添加几行代码几分钟的事情,随口答应了.但是到做的时候才发现事情远没有那么简单,测试发现将焦点给指定位置的控件表单可自动滑动到指定位置,但是在事件里面调用控件的Focus方法始终没有任何效果.遂觉得是否控件未初始话无法设置Focus所致,新开一个独立线程等待表单初始化完成时进行跳转.但是又发现“线程间操作无效”,原来是由于Windows安全策略新线程无法操作UI主线程,网上终于找到跨线程操作的示例.依葫芦画瓢,通过跨线程调用,

C# 跨线程调用控件

在C# 的应用程序开发中, 我们经常要把UI线程和工作线程分开,防止界面停止响应.  同时我们又需要在工作线程中更新UI界面上的控件, 下面介绍几种常用的方法 阅读目录 线程间操作无效 第一种办法:禁止编译器对跨线程访问做检查 第二种办法: 使用delegate和invoke来从其他线程中调用控件 第三种办法: 使用delegate和BeginInvoke来从其他线程中控制控件 第四种办法: 使用BackgroundWorker组件 源代码下载 线程间操作无效 界面上有一个button和一个la

线程调用

线程创建. –在进程中只有一个控制线程 –程序开始运行的时候每个进程只有一个线程,它是以单线程方式启动的,在创建多个线程以前,进程的行为与传统的进程没有区别. –gcc在链接的时候需要增加-lpthread选项. –创建一个线程调用pthread_create函数. #include <pthread.h> int pthread_create(pthread_t *thread,const pthread_attr_t *attr, void *(*start_routine)(void*)

c#中跨线程调用windows窗体控件

c#中跨线程调用windows窗体控件解决. 我们在做winform应用的时候,大部分情况下都会碰到使用多线程控制界面上控件信息的问题.然而我们并不能用传统方法来做这个问题,下面我将详细的介绍.首先来看传统方法: public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { Thread thre

多线程总结之旅(112):跨线程调用控件的几种方式

本来是写完线程池就结束多线程总结之旅系列的,但是想想平时在项目中用到线程仅仅不够的,为什么这么说呢?举个例子:我们有一个函数,它的功能就是加载数据,然后绑定到datagridview.现在我们开启一个线程去执行这个函数.结果可想而知,它会报错:提示线程无法访问...之类的话.为什么报错呢?因为你在开启的线程中操作了datagridview控件,也就是你跨线程调用控件了. 那么我们应该怎么跨线程调用控件呢?下面我就把我总结的几种方法奉献给各位. 跨线程调用控件的几种方法: 1.方法一:Contro

c#中跨线程调用windows窗体控件 .我们在做winform应用的时候,大部分情况下都会碰到使用多线程控制界面上控件信息的问题。然而我们并不能用传统方法来做这个问题,下面我将详细的介绍。

首先来看传统方法: public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { Thread thread = new Thread(ThreadFuntion); thread.IsBackground = true; thread.Start(); } private void Thread