1

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
4

3 に答える 3

1

使用しない理由: System.Diagnostics.Process?

Process myProcess = new Process();
myProcess.StartInfo.FileName = file; 
myProcess.Start();
于 2013-04-26T07:47:58.117 に答える
1

mainアプリケーションのメソッドに次を追加する必要があります。

[STAThread]
static void Main(string[] args)
{
    // ...

これはおそらく、UI 要素にアクセスしようとしている新しいスレッドによるものであり、一般に、アプリケーションごとに 1 つのスレッドのみがこれを実行できます。

于 2013-04-26T07:53:05.940 に答える
0

新しいアプリケーションはありません。アセンブリを独自のアプリに読み込んでいます。次を使用してスレッドのアパートメント モデルを変更できますThread.SetApartmentState: http://msdn.microsoft.com/en-GB/library/system.threading.thread.setapartmentstate.aspx

于 2013-04-26T07:51:48.647 に答える