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

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

效果展示


1.声明方法

cs 复制代码
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 显示调用

cs 复制代码
 private void Appeartxt_Click(object sender, EventArgs e)
 {
     new Thread(thread_control).Start();
 }

3.声明实例化Speech

cs 复制代码
 SpeechSynthesizer synthesizer=new SpeechSynthesizer();
 string word;

4.Speaking 按钮实现

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

5.textbox 回车代替按键

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

6.跨线程调用

cs 复制代码
CheckForIllegalCrossThreadCalls=false;

cs 复制代码
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();
        }
    }
}
相关推荐
小辉懂编程26 分钟前
C语言:51单片机实现数码管依次循环显示【1~F】课堂练习
c语言·开发语言·51单片机
醍醐三叶1 小时前
C++类与对象--2 对象的初始化和清理
开发语言·c++
Magnum Lehar2 小时前
3d游戏引擎EngineTest的系统实现3
java·开发语言·游戏引擎
Mcworld8573 小时前
java集合
java·开发语言·windows
成功人chen某3 小时前
配置VScodePython环境Python was not found;
开发语言·python
动感光博4 小时前
Unity序列化字段、单例模式(Singleton Pattern)
unity·单例模式·c#
海绵宝宝贾克斯儿4 小时前
C++中如何实现一个单例模式?
开发语言·c++·单例模式
史迪仔01124 小时前
[python] Python单例模式:__new__与线程安全解析
开发语言·python·单例模式
isyangli_blog4 小时前
(1-4)Java Object类、Final、注解、设计模式、抽象类、接口、内部类
java·开发语言
三块钱07944 小时前
【原创】基于视觉大模型gemma-3-4b实现短视频自动识别内容并生成解说文案
开发语言·python·音视频