• Winform 进程、线程、treeview


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

    进程要使用的类是: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 = 0; i < 10; i++)
                {
                    Console.WriteLine(i);
                    Thread.Sleep(1000);
                }
                (bbb as Button).Enabled = true;
    
            }
    View Code

    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 = "0001";
    
                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);
                }
            }
    
    
    
    
        }
    }
    View Code
    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[0].ToString();
                        c.AreaName = dr[1].ToString();
                        c.ParentAreaCode = dr[2].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[0].ToString();
                        c.AreaName = dr[1].ToString();
                        c.ParentAreaCode = dr[2].ToString();
    
                        clist.Add(c);
                    }
                }
    
                conn.Close();
                return clist;
            }
    
    
    
        }
    }
    View Code
  • 相关阅读:
    notepad++的使用
    windows下的ubuntu
    VMware Tools安装
    Terminal命令
    Linux文件操作
    vim学习
    Windows桌面美化
    求解移动字符串问题
    求解回文序列问题
    用Git命令把本地项目,提交到远程仓库
  • 原文地址:https://www.cnblogs.com/shadow-wolf/p/6171273.html
Copyright © 2020-2023  润新知