Я делаю программу, которая будет работать одновременно с несколькими вспышками. Из-за характера вспышки и ее производительности я не могу иметь все элементы управления, работающие на одном и том же потоке пользовательского интерфейса.
Моим, хотя обойти эту проблему было бы создание детских форм, каждый из которых со своим собственным управлением флэш-памятью, и запускать их на новые потоки. Я сделал это через:
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(), используемой в первом фрагменте кода.
Мне нужно знать, есть ли другой способ добиться того, что мне нужно? В конечном счете, элементы управления вспышкой должны работать на отдельных потоках. Любая помощь будет принята с благодарностью!
Похоже, вы хотите несколько доменов приложений...
Может быть, это может помочь...