当前位置: 首页 > news >正文

C# Winform 入门(1)之跨线程调用,程序说话

首先我们要知道,跨线程使用让文本显示在文本框中,然后进行程序读取。这期间我们需要调用Speech。 所用到的控件是  button  textbox

效果展示


1.声明方法

void thread_control()
{
    List<string> list = new List<string>();
    list.Add("这是一段由线程修改的控件文本\r\n");
    list.Add("跨线程的操作,你很快就能理解了");
    for(int i = 0; i < 2; i++)
    {
        txtbook.Text += list[i];
        Thread.Sleep(1500);
    }
} 

2.Appear 显示调用

 private void Appeartxt_Click(object sender, EventArgs e)
 {
     new Thread(thread_control).Start();
 }

3.声明实例化Speech

 SpeechSynthesizer synthesizer=new SpeechSynthesizer();
 string word;

4.Speaking 按钮实现

 private void speaktxt_Click(object sender, EventArgs e)
 {
     if(txtbook.Text!="")
     {
         word= txtbook.Text;
     }
     else
     {
         word = "请先输入文字";
     }
     synthesizer.SpeakAsync(word);
 }

5.textbox 回车代替按键

   private void txtbook_KeyDown(object sender, KeyEventArgs e)
   {
       if (e.KeyCode == Keys.Enter)
       {
           this.speaktxt.Focus();
           this.speaktxt_Click (sender, e);
       }
   }

6.跨线程调用

CheckForIllegalCrossThreadCalls=false;

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Speech;
using System.Speech.Synthesis;
using System.Threading;

namespace _01.Speak
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            CheckForIllegalCrossThreadCalls=false;
        }
        //右键添加引用 =>  引入System.Speech
        //synthesizer 综合器
        SpeechSynthesizer synthesizer=new SpeechSynthesizer();
        string word;
        private void speaktxt_Click(object sender, EventArgs e)
        {
            if(txtbook.Text!="")
            {
                word= txtbook.Text;
            }
            else
            {
                word = "请先输入文字";
            }
            synthesizer.SpeakAsync(word);
        }
        void thread_control()
        {
            List<string> list = new List<string>();
            list.Add("这是一段由线程修改的控件文本\r\n");
            list.Add("跨线程的操作,你很快就能理解了");
            for(int i = 0; i < 2; i++)
            {
                txtbook.Text += list[i];
                Thread.Sleep(1500);
            }
        }
        //按回车键,直接Speaking
        private void txtbook_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                this.speaktxt.Focus();
                this.speaktxt_Click (sender, e);
            }
        }
        //显示加载文字
        private void Appeartxt_Click(object sender, EventArgs e)
        {
            new Thread(thread_control).Start();
        }
    }
}

http://www.dtcms.com/a/104631.html

相关文章:

  • 敏捷开发10:精益软件开发和看板kanban开发方法的区别是什么
  • Windows 下的多功能汉字笔顺学习与字帖生成软件
  • 三维重构 优质视频
  • 【TS学习】(15)分布式条件特性
  • RoboOS与RoboBrain:引领具身智能新时代的跨本体协作框架
  • SpringCloud概述
  • JMeter脚本录制(火狐)
  • 【多线程】线程池
  • 【开发问题记录】Docker Hub 执行 docker pull命令,拉取镜像失败/sudo docker run hello-world报错
  • 爬虫获取1688关键字搜索接口的实战指南
  • PyTorch量化进阶教程:第二章 Transformer 理论详解
  • [GESP202503 C++六级题解]:P11962:树上漫步
  • Docker学习--容器生命周期管理相关命令--docker rm 命令
  • 【word】导出批注具体到某段引用
  • 【一起来学kubernetes】31、Helm使用详解
  • Redis 02
  • 深入C++栈:从STL到底层实现的全面解析
  • TCP 三次握手与四次挥手深度解析(面试高频)
  • 百度热力图数据获取,原理,处理及论文应用25
  • SEO长尾关键词优化实战策略
  • webpack和vite的区别是什么
  • NAT穿越
  • Ollama+open-webui搭建私有本地大模型详细教程
  • HashMap 在 JDK 1.7 和 JDK 1.8 有什么区别
  • EasyExcel导出自动回显中文,读取自动转换码值(基于全局转换器与自定义注解)
  • 基于SpringBoot的高校学术交流平台
  • FPGA学习(三)——数码管实现四位分秒计数器
  • 【Easylive】saveCategory方法中的if判断(对应增加和修改)
  • 如何获取ecovadis分数?获取ecovadis分数流程,更快通过ecovadis分数方法
  • 27--当路由器学会“防狼术“:华为设备管理面安全深度解剖(完整战备版)