Winfrom-3

1.OpenFileDialog 

 public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
                //定义一个文件打开控件
                OpenFileDialog ofd = new OpenFileDialog();
                //设置打开对话框的初始目录,默认目录为exe运行文件所在的路径
                ofd.InitialDirectory = Application.StartupPath;
                //设置打开对话框的标题
                ofd.Title = "请选择要打开的文件";
                //设置打开对话框可以多选
                ofd.Multiselect = false;
                //设置对话框打开的文件类型
                ofd.Filter = "文本文件|*.txt|音频文件|*.wav|图片文件|*.jpg|所有文件|*.*";
                //设置对话框是否记忆之前打开的目录
                ofd.RestoreDirectory = false;

                if (ofd.ShowDialog() == DialogResult.OK)
                {

                    string reg1 = @"jpg$|png$";
                    string reg2 = @"txt$";
                  //获取用户选择的文件完整路径
                   string filePath = ofd.FileName;

                    Console.WriteLine(filePath);
                if (Regex.IsMatch(filePath, reg1))
                {

                    //图片显示
                    pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;  //使图像拉伸或收缩,以适合PictureBox
                    this.pictureBox1.ImageLocation = filePath;
                }
                else if (Regex.IsMatch(filePath, reg2))
                {

                    Console.WriteLine(File.ReadAllText(filePath));
                
                }
         
               }
        }

2. 正则表达式

 //什么是正则表达式?
    //1.正则表达式(Regular Expression)是一种文本模式,
    //包括普通字符(如,a - z,A - Z,0 - 9等)和特殊字符(如:+,?,*等)。
    //2.正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。
    //3.正则表达式使用场景: 比如 登录 注册 验证邮箱  验证电话 验证密码等
            // 2.正则表达式基本使用
            // (1) ^和$边界符    ^匹配开头  $匹配结尾
            string reg2 = @"^abc"; //匹配字符串是不是以abc开头


            string reg3 = @"abc$"; //匹配字符串是不是以abc结尾
      // (2)[]字符集  [] 表示一系列的字符可被匹配,只要匹配其中一个就可以
            var reg4 = @"^[0-9]";  //匹配开头为数字的字符串
            var reg5 = @"^[a-z]";  //匹配开头为小写字母的字符串
            var reg6 = @"^[A-Z]";  //匹配开头为大写字母的字符串
            var reg7 = @"^[A-Za-z0-9] ";  //匹配开头为字母或者是数字的字符串
             //(3)^出现在[]内部 代表取反的意思
            var reg8 = @"^[^0-9]";   //匹配开头不为数字的字符串
              // (4) + 匹配前面的子表达式一次或多次。
            // 例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}
            var reg9 = @"zo+";
            // 6.* 匹配前面的子表达式0次或者多次
            // 例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。
            var reg10 = @"zo*";
            // 7. ?匹配前面的子表达式0次或者一次
            // 例如,"do(es)?" 可以匹配 "do" 或 "does" 。? 等价于 {0,1}。
            var reg11 = @"do(es)?";
            //8. | 表示或 匹配其中的一个或多个
           
            var reg12 = @"你好|他好|她好";
            //9.{}  限定{}前面字符出现的次数
            // {6}   6次
            // {6,8} 6-8次
            // {6,} 至少6次
            // \d 代表数字  类似 [0-9]
            var reg13 = @"^\d{6}";  //匹配开头6位都为数字的字符串
            string input = "cdabcdefghijkabc";
            string pattern = "bci";
            string replacement = "PP";
            var reg222 = @"^abc";
           
            
           
            // 检查是否匹配
            bool isMatch = Regex.IsMatch(input, reg4);
            Console.WriteLine("是否存在" + isMatch);

            替换字符串中的匹配部分
            //string result = Regex.Replace(input, pattern, replacement);
            //Console.WriteLine("替换结果 " + result);


            获取所有匹配
            //MatchCollection matches = Regex.Matches(input, pattern);
            //foreach (Match match in matches)
            //{
            //    Console.WriteLine("Found 'ai' at position " + match.Index);
            //}

            使用模式分割字符串
            //string[] parts = Regex.Split(input, pattern);
            //foreach (string part in parts)
            //{
            //    Console.WriteLine(part);
            //}

3. Invoke

 public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

        }
        //任务繁重考虑使用多线程编程
        //(再短时间内无法正常执行完的逻辑 --for  --网络延迟)
        //再使用多线程编程后,因为所有UI渲染过程都在主线成完成
        //但是事件响应函数时,不一定在主线程,
        //所以你在不确定的线程中修改 UI 可能会引起错误

        private void button1_Click(object sender, EventArgs e)
        {
            Button button = (Button)sender;
            Thread.Sleep(1000);
            Console.WriteLine("下载10%");
            Thread.Sleep(1000);
            Console.WriteLine("下载30%");
            Thread.Sleep(1000);
            Console.WriteLine("下载40%");
            Thread.Sleep(1000);
            Console.WriteLine("下载60%");
            Thread.Sleep(1000);
            Console.WriteLine("下载80%");
            Thread.Sleep(1000);
            Console.WriteLine("下载100%");

            button.Text = "下载完毕";
        }


        //Invoke方法的作用 在委托事件中 调用刷新UI操作时
        //去寻找主线程 刷新UI 保证UI刷新在主线程中完成
       //Invoke方法需要创建一个委托。可以事先写好函数和与之对应的委托
    
        private void button2_Click(object sender, EventArgs e)
        {
            Task.Run(() =>
            {    //繁重的任务
                Thread.Sleep(1000);
                Console.WriteLine("下载10%");
                Thread.Sleep(1000);
                Console.WriteLine("下载30%");
                Thread.Sleep(1000);
                Console.WriteLine("下载40%");
                Thread.Sleep(1000);
                Console.WriteLine("下载60%");
                Thread.Sleep(1000);
                Console.WriteLine("下载80%");
                Thread.Sleep(1000);
                Console.WriteLine("下载100%");

                //开启分线程执行繁重任务
                string str = "下载完毕";
                //使用Invoke 回到主线程 刷新UI
                this.Invoke(new Action(delegate ()
                {  
                    //UI刷新内容
                    this.button2.Text = str;
                }));
            });
        }
    }

4.await

   //同步
        private void button2_Click(object sender, EventArgs e)
        {
            var tempTask = Task.Run(() =>
            {
                Thread.Sleep(1000);
                Console.WriteLine("下载10%");
                Thread.Sleep(1000);
                Console.WriteLine("下载30%");
                Thread.Sleep(1000);
                Console.WriteLine("下载40%");
                Thread.Sleep(1000);
                Console.WriteLine("下载60%");
                Thread.Sleep(1000);
                Console.WriteLine("下载80%");
                Thread.Sleep(1000);
                Console.WriteLine("下载100%");

                return "下载完成111";

            });
            richTextBox1.Text = tempTask.Result;
        }

        //异步
        private async void button1_Click(object sender, EventArgs e)
        {
            var tempTask = Task.Run(() =>
            {

                Thread.Sleep(1000);
                Console.WriteLine("下载10%");
                Thread.Sleep(1000);
                Console.WriteLine("下载30%");
                Thread.Sleep(1000);
                Console.WriteLine("下载40%");
                Thread.Sleep(1000);
                Console.WriteLine("下载60%");
                Thread.Sleep(1000);
                Console.WriteLine("下载80%");
                Thread.Sleep(1000);
                Console.WriteLine("下载100%");

                return "下载完成";

            });
            string a = await tempTask;
            richTextBox1.Text = a;

        }
    }

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值