Silverlight, COM и темы - PullRequest
       9

Silverlight, COM и темы

1 голос
/ 01 марта 2011

Я получаю исключение "Неверный межпоточный доступ". Я занимаюсь разработкой приложения Silverlight. Проблема в том, что я создаю экземпляр объекта (COM + объект) в одном потоке и пытаюсь получить доступ из другого. Это необходимое поведение для моего приложения. Итак, я полагаю, что мне нужно сказать, что взаимодействие с COM находится в режиме MTAThread, но я не вижу смысла делать это Я знаю проблему, но не вижу решения.

Любая помощь? Заранее спасибо

Пример кода:

using System.ComponentModel;
using System.Windows.Controls;
using System.Windows;
using System.Threading;
using System.Runtime.InteropServices.Automation;
using System;

namespace BackgroundWorkerTest
{
    public partial class MainPage : UserControl
    {
        Thread backgroundThread;
        dynamic _myspeech;
        static readonly object locker = new object();

        public MainPage()
        {
            InitializeComponent();

            backgroundThread = new Thread(StartScanProcess);
            backgroundThread.Start();
        }

        private void StartScanProcess(object sender, DoWorkEventArgs e)
        {
            StartScanProcess();
        }

        private void StartScanProcess()
        {
            lock (locker)
            {
                _myspeech = AutomationFactory.CreateObject("Sapi.SpVoice")
                _myspeech.Volume = 100;
            } 
        }

        private void Button_Click(object sender, System.Windows.RoutedEventArgs e)
        {
            _myspeech.Speak(UIThreadId.Text); 
        }
    }
}

1 Ответ

1 голос
/ 22 марта 2011

вы пытались использовать Dispatcher?

что-то вроде: Dispatcher.BeginInvoke (делегат {_myspeech.Speak (UIThreadId.Text);});

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...