人生初のゲーミングチェア。デスクワーク主体のため、いつかは良い椅子を買おうと考えていた。そしていろいろ悩んだ末にKaiser3を購入した。
まずは結論から
腰痛い。全然体に合わない。
それでいて10万円近く支払っているんだから困った。
「高いから良い」というものではないということを身をもって体験した。
中古のオフィスチェアで十分だと思った。
続きを読む人生初のゲーミングチェア。デスクワーク主体のため、いつかは良い椅子を買おうと考えていた。そしていろいろ悩んだ末にKaiser3を購入した。
腰痛い。全然体に合わない。
それでいて10万円近く支払っているんだから困った。
「高いから良い」というものではないということを身をもって体験した。
中古のオフィスチェアで十分だと思った。
続きを読むTWAINを使ってスキャナを操作するWPFアプリを作っていて、情報源の少なさにかなり苦労した。1週間ほど格闘した中でわかったのは、TWAINはStateによって実行できるコマンドが変わることだ。ここかなり重要だった。
ここから参照できる仕様書(PDF)でしっかりとそのあたりに触れている。切羽詰まっていてちゃんと読んでいなかった・・・反省。
Stateについて触れているのは
あたりだろうか。Stateで実行できるコマンドが変わるため、本来実行すべき箇所でコマンド実行せずに見当違いな箇所で実行してしまい、思ったような結果が得られずにネットで検索を行うも解決せず、トライアンドエラーを繰り返して遠回りし泥沼にハマるパターンが多かった。
ざっと流れを説明すると、以下のように状態が変わる。
Stateの状態を把握しておけば、下記のサンプルコードを使って思い通りの処理を作れるだろう*1。いつかTWAINを使った実装に関して、ケースバイケースで解説したい。
その他、公式ドキュメントにはたくさんの実装する上で欠かせない情報が掲載されている。
定数定義やデバイス機能設定(Capability)に関しても他の章で扱っている。とにかく困ったら一読することをおすすめする。
このオブジェクトは別のスレッドに所有されているため、呼び出しスレッドはこのオブジェクトにアクセスできません。
BackgroundWorker.RunWorkerAsyncの引数にList<BitmapSource>型のリストを渡して、BackgroundWorker.OnDoWorkなどでBitmapSourceを取り出して処理を行う場合、単純に作成したBitmapSourceオブジェクトだと上記のエラーが発生する。
解決策としては、リストに入れる前にBitmapSource.Freezeメソッドを実行する。これでオブジェクトを別スレッドで共有できるようになる。
情報源は以下のスレッド。