技術ブログ
Windows開発、C#、.NET、その他技術的なトピックについて発信します。
COM / ActiveX、C# / .NET、WPF / WinForms、Windows アプリの改修や設計レビュー、不具合調査など、お困りごとがあれば問い合わせフォームからご連絡ください。
問い合わせる記事を検索
タイトル、概要、タグ、本文から記事を検索できます。
-
PeriodicTimer / System.Threading.Timer / DispatcherTimer の使い分け - .NET の定期実行をまず整理
前回の 普通のWindowsでソフトリアルタイムをできるだけ実現するための実践ガイド - まず見るチェックリスト では、Sleep 任せの周期ループを避け、イベント駆動や waitable timer を使う話を整理しました。
-
Generic Host / BackgroundService をデスクトップアプリに持ち込む理由 - 起動・寿命・graceful shutdown の整理がかなり楽になる
Windows ツールや常駐系アプリを少し育てると、UI の外側にある処理がじわじわ増えてきます。 定期ポーリング、ファイル監視、再接続、キュー処理、起動時初期化、終了時 flush。 最初は Form_Load や OnStartup や Task.Run でしのげますが、そのまま育つと、誰が開始して、誰が止め...
-
ActiveX / OCX を今どう扱うか - 残す・包む・置き換える判断表
ActiveX / OCX という言葉が出てくる案件は、だいたい空気が少し重いです。
-
C# を Native AOT でネイティブ DLL にする方法 - UnmanagedCallersOnly で C/C++ から呼び出す
前回の C# からネイティブ DLL を使うなら C++/CLI ラッパーが有力な理由 では、C# から C++ を呼ぶときの境界面を整理しました。今回は向きを逆にして、C/C++ から C# を呼ぶ話です。
-
WPF / WinForms の async/await と UI スレッドを一枚で整理 - await 後の戻り先、Dispatcher、ConfigureAwait、.Result / .Wait() の詰まりどころ
WPF / WinForms で async / await を使うときに一番迷いやすいのは、await のあとにどのスレッドへ戻るのか、そして いつ UI を触ってよいのか です。 特に Dispatcher、BeginInvoke、ConfigureAwait(false)、.Result / .Wait()...
-
産業用カメラ制御アプリが1か月後に突然落ちるとき(後編) - Application Verifier とは何かと異常系テスト基盤の作り方
Application Verifier は、Windows のネイティブコードや Win32 境界で起きる異常を前倒しで表面化させたいときに有力なツールです。 特に、ハンドル異常、ヒープ破壊、低リソース時の failure path をテストしたい場面では、通常系の試験だけでは見えない問題をかなり早く表に出せます。
-
産業用カメラ制御アプリが1か月後に突然落ちるとき(前編) - ハンドルリークの見つけ方と長期稼働向けログ設計
Windows アプリが長時間運転後に突然落ちるとき、最初にメモリリークを疑いたくなることはかなり多いです。 ただ、実際には ハンドルリーク が主犯で、数週間後にようやく二次障害として表面化している、というケースも少なくありません。
-
TCP 再送で産業用カメラ通信が数秒止まるとき - RFC1323 タイムスタンプと再送待ちの切り分け
産業用カメラや装置制御の通信では、平均では速いのに たまに数秒止まる という現象がいちばん厄介です。再現率が低く、普段は何も起きないので、UI、スレッド、GC、カメラ SDK、NIC、スイッチ、全部が少しずつ怪しく見えてきます。
-
FileSystemWatcher の使い方と注意点 - 取りこぼし、重複通知、完了判定の落とし穴
FileSystemWatcher は、Windows 上の .NET でファイル変更を監視するときにまず候補になる API です。 ただし、Created や Changed をそのまま完了通知だと思って使うと、取りこぼし、重複通知、途中ファイルの誤読でかなり普通に事故ります。
-
Media Foundation とは何か - COM と Windows メディア API の顔が見えてくる理由
Media Foundation を触り始めると、「Windows の動画や音声 API を使っているはずなのに、急に COM の話が増えた」と感じやすいです。 特に CoInitializeEx、HRESULT、IMFSourceReader、IMFTransform あたりがまとまって出てきて、Media F...
-
C# async/await のベストプラクティス - Task.Run と ConfigureAwait の判断表
C# の async / await は日常的に使いますが、実務で迷いやすいのは構文そのものより、どの場面でどの書き方を選ぶべきか です。 特に検索で多いのは、Task.Run をいつ使うか、ConfigureAwait(false) をどこに付けるか、fire-and-forget を許してよいか、といった判断...
-
Windows ソフトリアルタイムの実践ガイド - 遅延を減らすためのチェックリスト
この記事で扱うのは、特別なリアルタイム拡張を入れた Windows ではなく、普通の Windows 10 / 11 です。 対象は、一般的なデスクトップ PC やノート PC の上で動く user-mode の通常アプリ です。
-
ファイル連携の排他制御の基礎知識 - ファイルロックと原子的 claim のベストプラクティス
ファイル連携の排他制御は、共有フォルダや夜間バッチ、別プロセス連携でほぼ必ず問題になります。 特に検索で多いのは、ファイルロックだけで十分なのか、複数ワーカーが同じファイルを拾わない方法は何か、途中書き込みのファイルをどう避けるか、といった悩みです。
-
C# からネイティブ DLL を使うなら C++/CLI ラッパーが有力な理由 - P/Invoke と比較して整理
Windows の既存資産や既存 DLL を C# から使いたい、という要件はかなりよくあります。 相手が Win32 API のような素直な C インターフェースなら、P/Invoke で十分です。
-
HCPチャートとは何か - HCP-DSL を決定的 SVG に変換する MakingHCPChartSkill の使い方
HCPチャートとは何か - HCP-DSL を決定的 SVG に変換する MakingHCPChartSkill の使い方
-
COM STA/MTA の基礎知識 - スレッドモデルとハングを避ける考え方
COM STA/MTA の基礎知識 - スレッドモデルとハングを避ける考え方
-
32bit アプリから 64bit DLL を呼び出す方法 - COM ブリッジが役立つケーススタディ
32bit アプリから 64bit DLL を呼び出す方法 - COM ブリッジが役立つケーススタディ
-
COM とは何か - Windows COM の設計が今でも美しい理由
COM とは何か - Windows COM の設計が今でも美しい理由
-
技術ブログ開設のお知らせ - Windows / C# / COM 開発ブログを始めました
KomuraSoft の技術ブログを開設しました。