进程:
一个程序就是一个进程,但是也有一个程序需要多个进程来支持的情况

进程要使用的类是:Process
它在命名空间:System.Diagnostics;

静态方法Start();
也可以实例化对象,来调用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;
} }

线程:
一个进程就像是一个公司,默认只有一个老板
老板叫做 主线程
主线程一旦让它去执行一段需要时间的代码,那么就会出现
程序假死,失去控制

原因是:线程同一时间只能做一件事,而主线程是操作窗体控制的,一旦被占用,那么窗体就没人控制了。

解决办法:
招一个员工帮老板干这个活

开启线程:
线程基本使用:
//创建一个线程对象,告诉它要执行的是哪一个方法
Thread th = new Thread(aaa);

//准备好了,开始执行,不是立即开始,CPU决定什么时候开始
th.Start();
---------------------------------------------------------------
需要跨线程访问对象:
线程需要执行一个方法,而这个方法允许有一个参数,并且这个参数必须是object类型的

程序默认不允许跨线程访问对象,因为监控开着
需要关闭监控
在构造函数的构造方法下面写上:
Control.CheckForIllegalCrossThreadCalls = false;
---------------------------------------------------------------
程序退出立刻关闭所有线程:
线程默认开启为前台线程,程序必须将所有的前台线程执行完毕后才会真正退出程序

解决办法:将线程变为后台线程
//设置后台线程
th.IsBackground = true;
----------------------------------------------------------------

 public partial class Form2 : Form
{
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 控件

TreeView 控件显示Node 对象的分层列表,每个Node 对象均由一个标签和一个可选的位图组成。

利用treeview 显示省区县(递归)

FORM代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms; namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{
List<China> AllList = new List<China>(); 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);
}
} }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace WindowsFormsApplication2
{
public class China
{
public string AreaCode { get; set; }
public string AreaName { get; set; }
public string ParentAreaCode { get; set; } }
}
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text; namespace WindowsFormsApplication2
{
public class ChinaData
{
SqlConnection conn = null;
SqlCommand cmd = null; public ChinaData()
{
conn = new SqlConnection("server=.;database=mydb;user=sa;pwd=123");
cmd = conn.CreateCommand();
} public List<China> Select(string pcode)
{
List<China> clist = new List<China>(); cmd.CommandText = "select *from ChinaStates where ParentAreaCode = '" + pcode + "'"; conn.Open();
SqlDataReader dr = cmd.ExecuteReader(); if (dr.HasRows)
{
while (dr.Read())
{
China c = new China();
c.AreaCode = dr[].ToString();
c.AreaName = dr[].ToString();
c.ParentAreaCode = dr[].ToString(); clist.Add(c);
}
} conn.Close();
return clist;
} public List<China> Select()
{
List<China> clist = new List<China>(); cmd.CommandText = "select *from ChinaStates"; conn.Open();
SqlDataReader dr = cmd.ExecuteReader(); if (dr.HasRows)
{
while (dr.Read())
{
China c = new China();
c.AreaCode = dr[].ToString();
c.AreaName = dr[].ToString();
c.ParentAreaCode = dr[].ToString(); clist.Add(c);
}
} conn.Close();
return clist;
} }
}

Winform 进程、线程、treeview的更多相关文章

  1. WinForm进程 线程

    进程主要调用另一程序,线程 分配工作. 一.进程: 进程是一个具有独立功能的程序关于某个数据集合的一次运行活动.它可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体.Process 类,用来操 ...

  2. winform进程、线程、TreeView递归加载

    进程: 一般来说,一个程序就是一个进程,不过也有一个程序需要多个进程支持的情况. 进程所使用的类:Process 所需命名空间:System.Diagnostics; 可以通过进行来开启计算机上现有的 ...

  3. Winform进程、线程

    进程: 一般来说,一个程序就是一个进程,不过也有一个程序需要多个进程支持的情况. 进程要使用的类是:Process它在命名空间:System.Diagnostics; 1.静态方法Start(); 2 ...

  4. [WinForm]WinForm跨线程UI操作常用控件类大全

    前言 在C#开发的WinForm窗体程序开发的时候,经常会使用多线程处理一些比较耗时之类的操作.不过会有一个问题:就是涉及到跨线程操作UI元素. 相信才开始接触的人一定会遇上这个问题. 为了解决这个问 ...

  5. python学习笔记-进程线程

    1.什么是进程(process)? 程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程.程序和进程的区别就在于:程序是指令的集合,它是进程运行的静态描述 ...

  6. 获取系统中所有进程&线程信息

    读书笔记--[计算机病毒解密与对抗] 目录: 遍历进程&线程程序 终止进程 获取进程信息 获取进程内模块信息 获取进程命令行参数 代码运行环境:Win7 x64 VS2012 Update3 ...

  7. [skill] 进程 线程

    在业务逻辑上: 进程线程没有区别. 在系统资源上: 进程拥有自己的地址空间.线程拥有自己的堆栈和临时变量,与其他线程共享地址空间. 在通信代价上: 线程间通信代价更低,实现更方便.进程通信相对开销比较 ...

  8. pyhon——进程线程、与协程基础概述

    一直以来写博客都是实用主义者,只写用法,没信心写原理,但是每一次写作业的过程都有一种掘地三尺的感觉,终于,写博客困难症重症患者经历了漫长的思想斗争,还是决定把从网上淘到的各种杂货和自己的总结放在一起, ...

  9. WinForm控件TreeView 只部分节点显示 CheckBox

    WinForm控件TreeView 只部分节点显示  CheckBox 用过asp.net的应该知道,要在treeview中实现上述功能可以使用ShowCheckBox 属性指定那些节点显示check ...

  10. android 进程/线程管理(一)----消息机制的框架

    一:android 进程和线程 进程是程序运行的一个实例.android通过4大主件,弱化了进程的概念,尤其是在app层面,基本不需要关系进程间的通信等问题. 但是程序的本质没有变,尤其是多任务系统, ...

随机推荐

  1. 【wikioi】1014 装箱问题

    题目链接 算法:动态规划(01背包) 01背包思想:依次对待某一物体,考虑是否放入容量为V的背包中 用f[V]来表示容量为V的背包的最大价值,则决策是 f[V] = max{f[V], f[V-v[i ...

  2. js 图片处理 Jcrop.js API

    引入jquery.Jcrop.min.css和jquery.Jcrop.min.js 参数/接口说明 options 参数说明 名称 默认值 说明 allowSelect true 允许新选框 all ...

  3. TCP/IP基础知识

    TCP/IP基础知识 网络 TCP/IP 引言 本篇属于TCP/IP协议的基础知识,重点介绍了TCP/IP协议簇的内容.作用以及TCP.UDP.IP三种常见网络协议相关的基础知识. 内容 TCP/IP ...

  4. Js中的window.parent ,window.top,window.self 详解

    在应用有frameset或者iframe的页面时,parent是父窗口,top是最顶级父窗口(有的窗口中套了好几层frameset或者iframe),self是当前窗口, opener是用open方法 ...

  5. JavaScript事件对象【转】

    一. 事件对象 事件处理三部分组成:对象.事件处理函数=函数.例如:单击文档任意处. 1.鼠标按钮 非 IE(W3C)中的 button 属性 0 表示主鼠标按钮(常规一般是鼠标左键) 1 表示中间的 ...

  6. 获取Android studio的SHA1值

    D:\Android\BaiduMapsApiASDemo>c: C:\>cd .android 系统找不到指定的路径. C:\>cd Users C:\Users>cd Ad ...

  7. struts2中用xml配置文件去验证填写信息

    xml名字是这样的 actionName-validation.xml 每个action 对应一个xml文件 xml文件和action放在同一个包下 后台验证用户输入是否符合格式要求,不符合,提交后返 ...

  8. 关于Jquery获取Table中td内的内容

    $(this).children().eq(1).text()获取的是显示的值$(this).children().eq(1).html()获取的是<td></td>之间的所有 ...

  9. 《迷宫》特点分析之NABCD

    项目名称:迷宫 特点之一:死亡模式 特点描述:在路径上设置一个个点,每个点作为一个障碍或加成点,设置各种类型陷阱来减少角色血量,还有加血和各种加成设置. N:普通迷宫形式单一,游戏过程较平淡,缺乏一定 ...

  10. 用refresh控制浏览器定时刷新

    package cn.itcast.response; import java.io.IOException; import java.util.Random; import javax.servle ...