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();
        }
    }
}
相关推荐
小码编匠1 小时前
WPF 中的高级交互通过右键拖动实现图像灵活缩放
后端·c#·.net
唐青枫8 小时前
C#.NET 定时任务与队列利器:Hangfire 完整教程
c#·.net
hez201014 小时前
Runtime Async - 步入高性能异步时代
c#·.net·.net core·clr
mudtools1 天前
.NET驾驭Word之力:玩转文本与格式
c#·.net
唐青枫1 天前
C#.NET 数据库开发提速秘籍:SqlSugar 实战详解
c#·.net
mudtools2 天前
.NET驾驭Word之力:理解Word对象模型核心 (Application, Document, Range)
c#·.net
侃侃_天下2 天前
最终的信号类
开发语言·c++·算法
echoarts2 天前
Rayon Rust中的数据并行库入门教程
开发语言·其他·算法·rust
Aomnitrix2 天前
知识管理新范式——cpolar+Wiki.js打造企业级分布式知识库
开发语言·javascript·分布式
大飞pkz2 天前
【设计模式】C#反射实现抽象工厂模式
设计模式·c#·抽象工厂模式·c#反射·c#反射实现抽象工厂模式