1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

WPFで複数UIスレッドを作ってつらくなった話

Posted at

複数UIスレッドを作ったときに、つらい思いをしたパターンの情報共有です。

結論を3行で

  • UIスレッドを複数作ることは二度とないです
  • 絶対にUIスレッドは複数作りません
  • UIスレッドはMainスレッドだけです

前書き

ほぼ「複数 UI スレッドを WPF でやる前にやってほしいこと」の話です。アプリケーションの要件的に、参照先の記事に書いてある問題点は関係ないので、ちょっと試してみようかなと。
だいたい、MS Docsで紹介されている由緒正しい方法ですしね。

なにが起きたか

  • Application.Windowsを参照しただけで落ちました。サードパーティライブラリの中で参照していたので割とどうしようもない。挙動としては納得。
  • Application.ShutdownModeがほとんど役に立たない。OnLastWindowCloseに設定しても、Mainスレッドから表示したWindowがすべてCloseした段階でアプリケーションが終了する。そこしか監視していないんだろうなあ。

どうしたか

UIスレッドをMainスレッドに一本化しました。そこらへんのロジックを集約していたのが吉と出て、全体への影響はほとんどなし。

万一、複数UIスレッドを作りたい人がいたら

単一UIスレッドに戻せるような仕組みにはしておいたほうがいいと思います。問題が起きてから切り戻せるなら、複数UIスレッドもありだと思います。
ただ、どこで問題が起きるかわからない地雷原みたいな手法なので、私はもう二度とやりません。

終わりに

チートシートみたいに、この問題が起きないことがわかっているなら複数UIスレッドも悪くないよ、というリストが作れたらいいですね。
私は二度とUIスレッドを複数作らないので、新しい問題を発見することはないでしょうが。

参考記事

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?