C# PDFiumでPDFを読み込む

業務で利用するPDFを取り込んだらどうだろうと思い実験。とりあえず、ページ移動とブックマークのようなものだけ。

NuGetから、
・PdfiumViewer
・PdfiumViewer.Native.x86.v8-xfa
の2つをインストール。

 

C# クラス生成+リスト追加の高速化

・class → structへ変換
・AsParallel() / Linqの利用
・Capacity / Listの利用
・foreach() → AsParallel().ForAll()へ変換
・foreach() → Parallel.ForEach()へ変換
・List<ClassItem> → ConcurrentBag<ClassItem>へ変換
で実験。

 

C# Task/CancellationTokenでキャンセル

 

C# TabPageの複写

TabPageを動的に追加する場合、細かい設定は面倒なので、デザイナーで作っておいて複写したい。

TabPage、中に入れるControlどちらも、インスタンスに対して必要なプロパティを直接指定(nPage.Text = oPage.Textのように)した方が楽だけど、今回は自動で渡してみた。

 

 

C# ファイル検索(インクリメンタルサーチ)

以前からときどきfenrirというフリーソフトを利用していたが、更新が止まっているようなので、社内用に同じようなソフトを作成した。もともとファイル検索だけできればいいので、機能も見た目も限定的。

 

C# Timer遅延処理

インクリメンタルサーチ系を作るとき、だいたいTextChangedにそのまま処理をくっつけてしまうのだけど、量が多いとカクついてしまうので、TextChangedが連続していた場合Timerで遅延処理をつけたほうがいい。

 

C# Byte配列を16進数文字列へ

 

C# 別スレッドからコントロールにアクセス

あるいは、ラムダ式をMethodInvokerにキャストする。

・Invoke()の考え方として、Invoke()を呼び出したフォームに対して
別スレッドから操作をするメソッドを渡す。

・Invoke()の呼び出し方としては、複数回コントロールにアクセスする場合、Invokeの中ではなく、Invokeを複数回呼び出すような形にする。

・スレッドが別かどうか確認する場合(Controlにアクセスして大丈夫かと考える)
Control.InvokeRequired

 

C# DataTableをモデルクラスへ代入

直接カラム名を書いてしまうことが多いけど、リフレクションで作ってみる。

 

C# Event メモ

一般的にイベントハンドラーというのはイベント発生を待ち受けるイベントループに対して実際の処理の部分のこと。

EventHandler型というのは定義済みのデリゲート型のこと。EventHandler型の1つめの引数はObject型で2つめの引数がEventArgs型となる。

呼び出しは自身のクラスからのみ可能で、直接デリゲート型を公開せずに外部から登録/解除できる仕組み。

 

C# IEnumerable/IEnumerator メモ

C#2.0からイテレータ構文が導入され簡単に実装できるようなった。

戻り値は、IEnumerableを返す必要がある。

yield returnは処理を継続、yield breakはそこで処理が終了する。

 

C# 例外メモ

Try句の中では階層が深いところの例外でもキャッチできる。

Try句自体が階層になっている場合は上位に通知されない。

上位に通知する場合はCatch句の中でThrowする。

メッセージを持って上位に通知することもできる。①、②と表示される。

 

C# Delegate メモ

基本

複数代入できる(マルチキャスト)

匿名関数(匿名メソッド・ラムダ式)

C#2.0から匿名メソッド、C#3.0ラムダ式

C#2.0でジェネリック(型パラーメータ)が導入。Action,Func(返値有)を使うとDelegateの定義も不要になる。Action,Func等を定義済みデリゲートと呼ぶ。

実用性はないけど、ラムダ式と定義済みデリゲートで即時実行もできる。

C# フォルダ監視(ファイル追加・更新チェック)

簡易的なフォルダの監視ソフトを作ってみた。削除は検知せず、更新(ファイルサイズ)と追加のみ。

拠点間でのファイルの提出をシステム化しようとなり、先ず全てプログラム化かなとも考えたのだが、現状、ファイルの雛形の整理ができていないので、項目全てをプログラムに落とし込むには時間がかかってしまう。

それなら、ファイルそのものをフォルダに入れておけばいいだろうと考え監視ソフトを作ってみた。もっと高機能なソフトがフリーでもあるけど、自作しておくと後々ファイルの名称などでフィルタをかけたり自由にできる。

C# FFmpegにコマンド投げる③

以前も同じものを作ったのだけれど、もっと簡単に。

C# FFmpegにコマンド投げる①

C# FFmpegにコマンド投げる

 

C# ガントチャート試作

C# DataGridView セルのマージ(疑似的結合)

前回の記事でDataGridViewの結合を色々試しており、その流れで当初、進捗をセルの塗りつぶしで表現する感じのスケジュール管理用のソフトを作ろうかと考えていた。

作業の途中でふとセルの塗りつぶしではなくコントロールのLabelを置いたらどうだろうと思いついて、少し作業を進めてみた。