Movatterモバイル変換


[0]ホーム

URL:


Logo

目次

概要

(書きかけ)

非同期処理」の話とからめて、GUI アプリケーション開発と非同期処理の話。

GUI とディスパッチャー

(書きかけ、清書時は別ページにするかも)

0.5秒固まったら「使いにくい」、3秒固まったら「バグだ」、10秒固まったら「パソコンが壊れた」と言われる。↑ 大げさかもしれないけど、かなり真実。・メッセージ ループクリックとかキー ダウンのイベントは一度キューにたまってる(メッセージ ポンプ)ループでキューを見ては GUI の処理してるものがある。WinForms とか WPF では隠ぺいされてるけども、内部的には、while (GetMessage(ref msg, null, 0, 0)){    TranslateMessage(ref msg);    DispatchMessage(ref msg);}DispatchMessage の内部で、最終的に以下のようなメソッドが呼ばれてる。private static IntPtr WndProc(    IntPtr hwnd, int msg, IntPtr wParam,    IntPtr lParam, ref bool handled){    if (msg == WM_LBUTTONDOWN)    {        MessageBox.Show("左クリックされた");        handled = true;    }    return IntPtr.Zero;}WndProc 内で重たい処理するとフリーズ。(結局、イベントハンドラーで重たい処理をするとフリーズ)もちろん避けなきゃいけない。最初に言った通り、0.5秒超えたら(超える可能性あったら)同期処理すべきじゃない。・UI スレッド一方で、グラフィックがらみは、パフォーマンス上の理由からマルチスレッド不可。UI 要素は作ったスレッドからしかアクセスしちゃダメ。ということで、スレッド立てる → 重たい処理をそっちのスレッドでやる → UI スレッドに制御戻すってやらないとダメ。UI スレッドに制御戻すために使うのがディスパッチャー(dispatcher: 配送係)別スレッドから UI スレッドに、「この処理して」っていうメッセージを配送するって意味。

更新履歴

更新:言語バージョンの指定

[C#]

ファイル ベース実行

[C#]

C# 14.0 の新機能

[C#]

更新:[雑記] オーバーロード解決

[C#]

型の分割定義 (partial)

[C#]

ブログ

C# 14 の破壊的変更点(First-class Span)

ファイナライザー

文字列リテラルを data セクションに UTF-8 で書き込む案

nameof(T<>)

First-class な Span 型


誤字等を見つけた場合や、ご意見・ご要望がございましたら、GitHub の Issues まで気兼ねなくご連絡ください。

[8]ページ先頭

©2009-2025 Movatter.jp