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();
        }
    }
}
相关推荐
Scout-leaf1 天前
C#摸鱼实录——IoC与DI案例详解
c#
咕白m6251 天前
使用 C# 在 Excel 中应用多种字体样式
后端·c#
Artech2 天前
[MAF预定义的AIContextProvider-02]AgentSkillsProvider——将Agent Skills引入MAF
ai·c#·agent·agent skills·maf
LDR0062 天前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
雪碧聊技术2 天前
Tree.js是什么?一文讲透
开发语言·javascript·ecmascript
码云数智-园园2 天前
C++20 Modules 模块详解
java·开发语言·spring
swordbob2 天前
NIO的channel中什么是 fd(File Descriptor,文件描述符)
java·开发语言·nio
源分享2 天前
Java线程同步的多种实现方法(非常详细)
java·开发语言·jvm
Luminous.2 天前
C语言--day30
c语言·开发语言
何以解忧,唯有..2 天前
Go语言循环语句详解:for、range与循环控制
开发语言·算法·golang