1

アイドル状態の Windows フォーム アプリ、WPF アプリ、または Windows ストア アプリを Visual Studio に分割すると ([デバッグ] -> [すべて中断])、[スレッド] ウィンドウに、それがメイン スレッド (= UI スレッドですよね?) で実行されていることが示されます。クリック イベント ハンドラーをデバッグするとき、最初の 2 つのアプリケーションはまだメイン スレッドで実行されていますが、Windows ストア アプリはワーカー スレッドで実行されています。このスレッドは実際には UI スレッドですか? もしそうなら、なぜワーカー スレッドとラベル付けされているのですか? また、最初の 2 つのアプリケーションと Windows ストア アプリに違いがあるのはなぜですか? Windows 8 の「すべての非同期」に関係しているのですか?

4

1 に答える 1

2

Yes, Windows Store apps operate very differently from regular desktop apps. Under the hood they are out-of-process COM servers, a very different activation model from regular Windows EXEs. They are started by the RPCSS service, the startup thread calls RoInitialize() to make itself an MTA thread. WinRT plumbing then creates an STA thread that becomes the home for the UI gadgets and dispatcher loop. Which looks like a worker thread in the debugger.

All of this is very poorly documented, somehow the CLR shoe-horns itself into this activation model. Details that are hidden in the language project built into the CLR and utterly undocumented. You are not supposed to worry about it. Which seems to work, I've seen very few questions from programmers fighting the COM threading model.

于 2012-09-22T13:02:19.037 に答える