C # - правильно запустить элемент управления или формы в отдельном потоке

1

Я делаю программу, которая будет работать одновременно с несколькими вспышками. Из-за характера вспышки и ее производительности я не могу иметь все элементы управления, работающие на одном и том же потоке пользовательского интерфейса.

Моим, хотя обойти эту проблему было бы создание детских форм, каждый из которых со своим собственным управлением флэш-памятью, и запускать их на новые потоки. Я сделал это через:

for (int i = 0; i < numClients; i++)
        {
            Thread clientThread = new Thread(new ThreadStart(() =>
                {
                    FrmClient c = new FrmClient();
                    c.ShowDialog();
                }));
            clientThread.IsBackground = true;
            clientThread.SetApartmentState(ApartmentState.STA);
            clientThread.Start();
        }

Однако это настроено настолько неустойчиво, что это даже не смешно. Исключения перекрестных забросов выбрасываются влево и вправо.

Я вызываю форму для доступа к ее членам правильно, но форма не может даже получить доступ к своим собственным членам без вызова, например:

public partial class FrmClient : Form
{

    public FrmClient()
    {
        InitializeComponent();
        this.Shown += new FormShownEventHandler(Shown);
    }  

    void Shown(object sender, EventArgs e)
    {
         this.WindowState = FormWindowState.Maximized;
         // ^ CrossThreadException

         this.Invoke(new MethodInvoker(() =>
              { 
                   this.WindowState = FormWindowState.Maximized;
              }));
         // Works
     }
 }

И просто закрытие формы с помощью кнопки "Выход" вызывает исключение перекрестного потока в функции ShowDialog(), используемой в первом фрагменте кода.

Мне нужно знать, есть ли другой способ добиться того, что мне нужно? В конечном счете, элементы управления вспышкой должны работать на отдельных потоках. Любая помощь будет принята с благодарностью!

Теги:
multithreading
flash

1 ответ

0

Похоже, вы хотите несколько доменов приложений...

Может быть, это может помочь...

http://denisvuyka.wordpress.com/2007/10/17/make-a-really-dynamic-plugin-using-multiple-application-domains/

Ещё вопросы

Сообщество Overcoder
Наверх
Меню