Вызов события нажатия кнопки из другого потока - C#
Формулировка задачи:
Всем доброго времени суток)Ребят, помогите решить проблему!Суть моей программки проста, нужно прикрутить голосовое управление(оно прикручено и работает отлично), но суть проблемы встала вот в чём, есть класс Speech в нём происходят некоторые действия и по итогам распознания команды должны выполниться соответствующие действия, то есть в конце ниже приведенного кода есть метод "l[i].PerformClick()", который должен вызвать событие нажатия кнопки, параметры которой передаются через массив "l". Я проверял действия других событий в этом коде, таких как звук например, всё работает как надо, но вот с вызовом события нажатия определённой кнопки у меня затык(помогите решить пожалуйста...
Листинг программы
- using System;
- using System.Collections.Generic;
- using System.Data;
- using System.Drawing;
- using System.Linq;
- using Microsoft.Speech.Recognition;
- using System.Media;
- using System.IO;
- using System.Globalization;
- using System.Threading;
- using System.Windows.Forms;
- namespace Project
- {
- public partial class Form1 : Form
- {
- public Form1()
- {
- InitializeComponent()
- List<object>mass=new List<object>();
- for(int i=0;i<Controls.count;i++)
- {
- mass.add(Controls[i]) ;
- }
- Speech sp = new Speech();
- sp.rech(new MyClass().izvlechenie_button(mass));
- }
- private void button6_Click(object sender, EventArgs e)
- {
- Application.Exit();
- }
- }
- class MyClass()
- {
- public List<Button> izvlechenie_button(List<object>mass)
- {
- List<Button> mass1 = new List<Button>();
- for(int i=0;i<mass.Count;i++)
- {
- if(mass[i].GetType() == typeof(Button))
- {
- mass1.Add((Button)mass[i]);
- }
- }
- return mass1;
- }
- }
- Class Speech
- {
- static Button[] l;
- public void rech(Button[] bb)
- {
- l = bb;
- string[] mass = new string[bb.Length];
- for (int i = 0; i < mass.Length; i++)
- {
- mass[i] = bb[i].Text;
- }
- CultureInfo ci = new CultureInfo("ru-ru");
- SpeechRecognitionEngine sre = new SpeechRecognitionEngine(ci);
- sre.SetInputToDefaultAudioDevice();
- sre.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(sre_spichrecoding);
- Choices numbers = new Choices();
- numbers.Add(mass);
- GrammarBuilder gb = new GrammarBuilder();
- gb.Culture = ci;
- gb.Append(numbers);
- Grammar g = new Grammar(gb);
- sre.LoadGrammar(g);
- sre.RecognizeAsync(RecognizeMode.Multiple);
- }
- static void sre_spichrecoding(object sender, SpeechRecognizedEventArgs e)
- {
- if (e.Result.Confidence > 0.7)
- {
- for(int i=0;i<l.Length;i++)
- {
- if(l[i].Text == e.Result.Text)
- {
- l[i].PerformClick();//ошибка здесь
- }
- }
- }
- }
- }
- }
- }
Решение задачи: «Вызов события нажатия кнопки из другого потока»
textual
Листинг программы
- Action action = () => {
- for(int i=0;i<l.Length;i++)
- {
- if(l[i].Text == e.Result.Text)
- {
- l[i].PerformClick();//ошибка здесь
- }
- };
- Invoke(action);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д