winform进程、线程

摘要:
随笔-86文章-0评论-0 winform进程,线程进程:一般来说,程序是一个进程,但也有程序需要多个进程支持的情况。一个程序只有一个主线程。winform中的主线程控制窗体本身的操作。如果您希望它执行一段需要一定时间才能完成的代码,那么表单将被卡住并显示为挂起状态。为了避免这种情况,需要使用多个线程。

随笔- 86 文章- 0 评论- 0

winform进程、线程

进程:

一般来说,一个程序就是一个进程,不过也有一个程序需要多个进程支持的情况。

进程所使用的类:Process

所需命名空间:System.Diagnostics;

可以通过进行来开启计算机上现有的程序:

1、使用静态方法Start();但必须要知道进程名

2、也可以实例化对象,来调用Start()普通方法,但调用普通方法之前需要给

StartInfo属性设置一个对象,来通知它要打开的是哪个进程(绝对路径)

例:点击按钮选择文件路径,并显示出来,点击第二个按钮可打开此程序

winform进程、线程第1张winform进程、线程第2张
复制代码
private void button1_Click(object sender, EventArgs e)
        {
            Process p = new Process();
            ProcessStartInfo psi = new ProcessStartInfo(textBox1.Text.Trim());

            p.StartInfo = psi;

            p.Start();

        }

        private void button2_Click(object sender, EventArgs e)
        {
            openFileDialog1.Filter = "应用程序|*.exe";

            DialogResult dr = openFileDialog1.ShowDialog();

            if (dr == DialogResult.OK)
            {
                textBox1.Text = openFileDialog1.FileName;
            }

        }
复制代码
进程

线程:

线程是程序中一个单一的顺序控制流程。一个程序只有一个主线程,winform中主线程就是控制窗体本身操作的,

如果要让它去执行一个需要一定时间才能完成的代码,那此时窗体会卡住,出现假死状态,为了避免这种情况,就需要用到多线程。

创建线程对象:Thread

线程需要执行一个方法,而这个方法允许有一个参数,并且这个参数必须是object类型的

程序默认不允许跨线程访问对象,如果仍想访问,需要在构造函数中写上Control.CheckForIllegalCrossThreadCalls = false;

线程默认开启为前台线程,程序必须将所有的前台线程执行完毕后才会真正退出程序,所以一般都会将线程改为后台线程th.IsBackground = true;

注:想让线程去执行的功能必须封装成方法

例:

winform进程、线程第5张winform进程、线程第6张
复制代码
public Form2()
        {
            InitializeComponent();

            Control.CheckForIllegalCrossThreadCalls = false;

        }

        private void button1_Click(object sender, EventArgs e)
        {
            //创建一个线程对象,告诉它要执行的是哪一个方法
            Thread th = new Thread(aaa);

            //设置后台线程
            th.IsBackground = true;

            //准备好了,开始执行,不是立即开始,CPU决定什么时候开始
            th.Start(sender);
            (sender as Button).Enabled = false;
        }

        private static void aaa(object bbb)
        {
            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine(i);
                Thread.Sleep(1000);
            }
            (bbb as Button).Enabled = true;

        }
复制代码

免责声明:文章转载自《winform进程、线程》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇(转)了解一下,各种图片格式的区别WebConfig配置 文件加密处理下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Python多进程与多线程

1、基本概念 2、多线程内容方法 3、多进程内容方法 1、基本概念 1.1 线程 1.1.1 什么是线程 线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流, 一个进程中可以并发多个线程,每条线程并行执行不同的任务。A thread is an execution context,...

[C#] 多线程总结(结合进度条)

(一)使用线程的理由 1、可以使用线程将代码同其他代码隔离,提高应用程序的可靠性。 2、可以使用线程来简化编码。 3、可以使用线程来实现并发执行。 (二)基本知识 1、进程与线程:进程作为操作系统执行程序的基本单位,拥有应用程序的资源,进程包含线程,进程的资源被线程共享,线程不拥有资源。 2、前台线程和后台线程:通过Thread类新建线程默认为前台线程。当...

Winform 自定义文本框

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading....

windows线程yield以及Sleep(0)和SwitchToThread之间的区别

C++的自定义线程函数内调用了一个自定义的yield()接口。 在windows上是调用了SwitchToThread来实现的,linux是pthread_yield实现的。 Sleep(0):时间片只能让给优先级相同或更高的线程; SwitchToThread():只要有可调度线程,即便优先级较低,也会让其调度。 下面是MSDN上对Sleep函数的描述:...

内存管理[3]堆

VirtualAlloc 分配的内存是以 4K 为最小单位、连续的内存地址(但映射到真实的内存时它不一定是连续的), 前面说了, 它不适合分配小内存(譬如只有几个字节的变量); 局部的变量在 "栈" 中有程序自动管理, 那么那些全局的小变量怎么办呢? 这就要用到 "堆".这样看来, VirtualAlloc 分配的内存既不是 "栈" 也不是 "堆"; Vi...

WinForm控件之【ProgressBar】

基本介绍 进度条控件,用于显示某操作动作进度或跑马灯效果。 常设置属性 Value:获取或设置进度栏的当前位置; Style:进度栏指示进度所使用的展示方式; Maximum:控件使用范围的上限; Minimum:控件使用范围的下限; MarqueeAnimationSpeed:进度块在进度栏内滚动所用的时间段,以毫秒为单位; Step:调用Perform...