winform进程、线程、TreeView递归加载
进程:
一般来说,一个程序就是一个进程,不过也有一个程序需要多个进程支持的情况。
进程所使用的类:Process
所需命名空间:System.Diagnostics;
可以通过进行来开启计算机上现有的程序:
1、使用静态方法Start();但必须要知道进程名
2、也可以实例化对象,来调用Start()普通方法,但调用普通方法之前需要给
StartInfo属性设置一个对象,来通知它要打开的是哪个进程(绝对路径)
例:点击按钮选择文件路径,并显示出来,点击第二个按钮可打开此程序
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;
注:想让线程去执行的功能必须封装成方法
例:
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 = ; i < ; i++)
{
Console.WriteLine(i);
Thread.Sleep();
}
(bbb as Button).Enabled = true; }
线程
TreeView递归加载:
递归就是在方法里面调用这个方法本身,但由于执行效率不高,不是很常用
Tag属性:每个控件都有,是用户自定义内容,方便程序读取某个对象使用
例:利用递归给TreeView加载中国的地区,此处由于递归中重复开启关闭数据库查询非常卡,所以只查询全部,使用Lambda表达式操作泛型集合实现
public Form1()
{
InitializeComponent(); AllList = new ChinaData().Select(); TreeNode tn1 = new TreeNode("中国");
tn1.Tag = ""; NodesBind(tn1); treeView1.Nodes.Add(tn1); } public void NodesBind(TreeNode tn)
{
//lambda 表达式
List<China> clist = AllList.Where(r => r.ParentAreaCode == tn.Tag.ToString()).ToList(); foreach (China c in clist)
{
TreeNode tnn = new TreeNode(c.AreaName);
tnn.Tag = c.AreaCode; NodesBind(tnn); tn.Nodes.Add(tnn);
}
}
递归加载
winform进程、线程、TreeView递归加载的更多相关文章
- WinForm 进程、线程、TreeView递归加载、发送邮件--2016年12月13日
进程:一个程序就是一个进程,但是也有一个程序需要多个进程来支持的情况 进程要使用的类是:Process它在命名空间:System.Diagnostics; 静态方法Start(); Process.S ...
- WinForm TreeView递归加载
这个其实通俗一点讲就是的树状分支图 首先利用递归添加数据 数据放入 treeView1.Nodes.Add() 中 public Form3() { InitializeComponent(); Tr ...
- treeview递归加载
实体类: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ...
- 省市数据递归加载到TreeView
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- 将Xml文件递归加载到TreeView中
#region [通过XDocument的方式将Xml文件递归到TreeView控件中] //读取Xml文件(XDocument) //1.加载Xml文件 XDocument document=XD ...
- C# IO操作(五)文件的递归加载
本篇是一个案例,其核心通过代码展示代码中的递归这个用法,程序的界面如下:
- (BUG已修改,最优化)安卓ListView异步加载网络图片与缓存软引用图片,线程池,只加载当前屏之说明
原文:http://blog.csdn.net/java_jh/article/details/20068915 迟点出更新的.这个还有BUG.因为软引应不给力了.2.3之后 前几天的原文有一个线程管 ...
- 递归加载Treeview
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...
- WinForm中使用BackgroundWorker异步加载数据并使用进度条
在WinForm程序中,有时会因为加载大量数据导致UI界面假死,这种情况对于用户来说是非常不友好的.因此,在加载大量数据的情况下,首先应该将数据加载放在另一线程中进行,这样保证了UI界面的响应:其次可 ...
随机推荐
- 深入理解Java中的String
一.String类 想要了解一个类,最好的办法就是看这个类的实现源代码,来看一下String类的源码: public final class String implements java.io.Ser ...
- mac显示隐藏文件
苹果Mac OS X操作系统下,隐藏文件是否显示有很多种设置方法,最简单的要算在Mac终端输入命令. 显示/隐藏Mac隐藏文件命令如下(注意其中的空格并且区分大小写): 第一种 显示Mac隐藏文件的命 ...
- Altium Designer 的entry sheet ,offsheet和port作用(转载)
1.图纸结构 图纸包括两种结构关系: 一种是层次式图纸,该连接关系是纵向的,也就是某一层次的图纸只能和相邻的上级或下级有关系: 另一种是扁平式图纸,该连接关系是横向的,任何两张图纸之间都可以建立信号连 ...
- 模板化的七种排序算法,适用于T* vector<T>以及list<T>
最近在写一些数据结构以及算法相关的代码,比如常用排序算法以及具有启发能力的智能算法.为了能够让写下的代码下次还能够被复用,直接将代码编写成类模板成员函数的方式,之所以没有将这种方式改成更方便的函数模板 ...
- WebService入门
1.什么是web服务: web服务是一种可以用来解决跨网络应用集成问题的开发模式,这种模式为实现"软件即服务"提供了技术保障. 2.web服务的三个核心 2.1 SOAP SOA ...
- 使用Grunt构建自动化开发环境
1.准备工作 1)首页确保电脑上网,以及能够访问https://registry.npmjs.org/,因需从此网站中下载安装相应的插件; 2)电脑安装Node.js,Grunt及Grunt插件都是基 ...
- laravel强大功能路由初探(二)
目标当然是先输出helloworld 配置hosts文件和apache下的httpd-vhosts.conf, hosts:127.0.0.1 www.blog.com httpd-vhosts.c ...
- html div 添加链接
<html> <body> <a href="http://www.w3school.com.cn/" target="_blank&quo ...
- ES6学习笔记二
字符串遍历 var str = 'hello'; for(let s of str){console.log(s += ' ')} //h e l l o 字符串查找:添加了include(str,i ...
- WebApi官方系列
一.入门 1.1Asp.Net WebApi2 入门 1.2WebApi2的Action返回值 1.3WebApi2自动生成帮助页 二.路由 2.1WebApi2的路由规则 2.2WebApi2的Ac ...