Можно « уходят» несколько графических потоков?

Моя Цель

я хотел бы, чтобы основной поток обработки (без GUI), и быть в состоянии spin-off GUI в свой собственный фон потоков по мере необходимости, и с моей основной номера для графического потока продолжать работать. Иначе говоря, я хочу, чтобы мой главный номера для GUI-нить, чтобы быть владельцем GUI-нить, а не наоборот. Я не уверен, что это возможно даже с помощью Windows Forms(?)

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

Фон

я компонентно-ориентированной системе, в которой контроллер динамически загружать сборки и инстанцирует и запустить классов, реализующих общие интерфейс icomponent интерфейс с единственным методом DoStuff() .

какие компоненты, которая загружается настраивается через xml-файл конфигурации и добавление новых сборок, содержащих различные реализации интерфейс icomponent . Компоненты предоставляет вспомогательные функции для основного приложения. В то время как основная программа делает это вещь, например. контроля АЭС, компоненты могут быть выполнении задач утилита (в их собственных потоков), например. очистка базы данных, рассылка электронной почты, печати веселые шутки на принтере, что у вас есть. - Чего бы мне хотелось, чтобы у одного из этих компонентов иметь возможность отображения графического интерфейса, например. сведения о состоянии для указанных компонент для отправки по электронной почте.

срок службы всей системы выглядит следующим образом :

  1. запуске Приложения.
  2. Проверить файл конфигурации для загрузки компонентов. Загрузить их.
  3. Для каждого компонента, выполните DoStuff() для инициализации и заставить его жить своей жизнью в собственные потоки.
  4. Продолжать делать основное применение-штуковину король работы, навсегда.

я еще не удавалось успешно выполнять пункт 3, если компонент запускает GUI в DoStuff() . Это просто останавливается до тех пор, пока GUI закрыт. И до тех пор, пока не GUI закрыта программа " прогресс", пункт 4.

было бы здорово, если бы эти компоненты были позволило начать свой собственный GUI Windows Forms.

Проблема

Когда компонент пытается создать графическое приложение в DoStuff() (точная строка кода, когда компонент запускается Application.Run(theForm)) , компонента и, следовательно, наша система "зависает" на Application.Run() строки до тех пор, пока GUI закрыт. Ну, просто загорелся GUI, прекрасно работает, как ожидалось.

Пример компонентов. Нет ничего общего с GUI, в то время как вторая запускает мило с windows розовые пушистые кролики в них.

public class MyComponent1: IComponent
{
public string DoStuff(...) { // write something to the database }
}

public class MyComponent2: IComponent
public void DoStuff()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form());

// I want the thread to immediately return after the GUI
// is fired up, so that my main thread can continue to work.
}
}

я попытался это с ними не повезло. Даже когда я пытаюсь запустить GUI в его собственном потоке, выполнение останавливается до тех пор, пока GUI, как closed.

    public void DoStuff()
{
new Thread(ThreadedInitialize).Start()
}

private void ThreadedInitialize()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form());
}

можно ли spin-off GUI и возвращение после Application.Run()?

Найдено 3 ответа:

Possible to “spin off” several GUI threads? (Not halting the system at Application.Run)

http://stackoverflow.com/questions/2872/possible-to-spin-off-several-gui-threads-not-halting-the-system-at-applicati

Посмотреть решение →