System.Activator.CreateInstance и потоки
Я вызываю внешнее приложение, которое превращает XML в PDF.
dynamic generator = null;
Assembly a = Assembly.LoadFrom(file);
Type type = a.GetType("Application.ConsoleStartup.Program");
generator = Activator.CreateInstance(type);
а потом
generator.Run("testXML.xml");
И вообще вещь работает. Единственная проблема заключается в том, что в определенный момент вновь открытое приложение нуждается в потоке STA. Проблема в том, что у меня нет доступа (или очень ограничен) к этому недавно открытому приложению. Есть ли способ обойти это? Обратите внимание, что я не очень разбираюсь в потоках.
Ошибка выглядит так:
error DCP999: [System.InvalidOperationException] The calling thread must be STA, because many UI components require this.
at System.Windows.Input.InputManager..ctor()
at System.Windows.Input.InputManager.GetCurrentInputManagerImpl()
at System.Windows.Input.InputManager.get_Current()
at System.Windows.Input.KeyboardNavigation..ctor()
at System.Windows.FrameworkElement.FrameworkServices..ctor()
at System.Windows.FrameworkElement.EnsureFrameworkServices()
at System.Windows.FrameworkElement..ctor()
at System.Windows.Controls.Control..ctor()
at System.Windows.Controls.ContentControl..ctor()
at System.Windows.Controls.ToolTip..ctor()
at Application.Parser.Html.Model.Anchor.AfterInsert(IParseContext pc) in C:\work\Common\Main\Source\Parsers\HtmlParser\Model\Anchor.cs:line 31
3 ответа
Почему бы не использовать: System.Diagnostics.Process
?
Process myProcess = new Process();
myProcess.StartInfo.FileName = file;
myProcess.Start();
Вы должны добавить следующее к вашему main
способ применения:
[STAThread]
static void Main(string[] args)
{
// ...
Вероятно, это связано с тем, что новый поток пытается получить доступ к элементам пользовательского интерфейса, и в целом это может сделать только один поток на приложение.
Нового приложения нет, вы загружаете сборку в собственное приложение. Вы можете изменить модель квартиры вашей темы, используя Thread.SetApartmentState
: http://msdn.microsoft.com/en-GB/library/system.threading.thread.setapartmentstate.aspx