Dispatcherによる、UI更新

別スレッドによるUI更新は、invokeやpostmessageを使った更新遅延テクニックを使いますが、WPFで標準的に利用されているDispacherクラスを利用したUI更新を使うことができます。むしろ、今後はこの更新テクニックが主流であるといえます。Postmessageは役割を終えたのかもしれません。



まず、UI更新に利用するDispacherクラスですが完全クラス名はSystem.Windows.Threading.Dispatcherで、参照設定はWindowsBaseになります。WPFプロジェクトだとデフォルトで参照設定されていますが、WindowsFormsプロジェクトだと入っていないので、必要であれば追加します。


使い方の例。Dispacherオブジェクトを格納する変数をForm_Loadで格納しておきます。

        private System.Windows.Threading.Dispatcher _dispather = null;

        private void MainForm_Load(object sender, EventArgs e)
        {

            // UIスレッドのディスパッチャー取得
            _dispather = Dispatcher.CurrentDispatcher;

        }

あとは、UIを更新するところで以下のように記述します。

            _dispather.BeginInvoke(new Action(() => {
                this.checkBox1.Checked = false;
            }), null);

img要素で読み込みに失敗した時に非表示にする。もしくは代替画像を表示する。

リンク切れなどでimg要素が表示できない場合の対応です。onerrorイベントハンドラを使用します。


非表示にする。

<img src="original.png" alt="title" onerror="this.style.display='none'"/>


代替画像を表示にする。

<img src="original.png" alt="title" onerror="this.src='/Images/alternate.png'"/>

postgresqlのpsqlコマンドラインオプション


C:\Program Files\PostgreSQL\9.4\bin>psql.exe --help
psqlPostgreSQL の会話型ターミナルです。

使用方法:
psql [オプション]... [データベース名 [ユーザ名]]

一般的なオプション:
-c, --command=コマンド (SQLまたは内部の)単一コマンドを一つだけ実行して終了
-d, --dbname=DB名 接続するデータベース名を指定(デフォルト: "nakaoka")
-f, --file=ファイル名 ファイルからコマンドを読み込んで実行後、終了
-l(エル), --list 使用可能なデータベース一覧を表示して終了
-v, --set=, --variable=名前=値
psql 変数 '名前' に '値' をセット
-V, --version バージョン情報を表示し、終了します
-X, --no-psqlrc 初期化ファイル (~/.psqlrc) を読みこまない
-1(数字の1), --single-transaction
単一のトランザクションとして実行(対話式でない場合)
-?, --help このヘルプを表示し、終了します

入出力オプション:
-a, --echo-all スクリプトからのすべての入力を表示
-e, --echo-queries サーバーへ送信したコマンドを表示
-E, --echo-hidden 内部コマンドが生成した問い合わせを表示
-L, --log-file=ファイル名 セッションログをファイルに書き込む
-n, --no-readline 拡張コマンドライン編集機能(readline)を無効にする
-o, --output=ファイル名 問い合わせ結果をファイル(または |パイプ)に送る
-q, --quiet 静かに実行(メッセージなしで、問い合わせの出力のみ)
-s, --single-step シングルステップモード(各問い合わせごとに確認)
-S, --single-line 単一行モード(行末を SQL コマンドの終了とみなす)

出力フォーマットオプション:
-A, --no-align 桁揃えなしのテーブル出力モード
-F, --field-separator=STRING
field separator for unaligned output (default: "|")
-H, --html HTML テーブル出力モード
-P, --pset=変数[=値] 表示オプション '変数' を '値' にセット (\pset コマン
ドを参照)
-R, --record-separator=STRING
record separator for unaligned output (default: newli
ne)
-t, --tuples-only 行のみを表示
-T, --table-attr=TEXT HTMLテーブルのタグ属性をセット(width, border等)
-x, --expanded 拡張テーブル出力を有効にする
-z, --field-separator-zero
set field separator for unaligned output to zero byte

-0, --record-separator-zero
set record separator for unaligned output to zero byt
e

接続オプション:
-h, --host=ホスト名 データベースサーバーのホストまたはソケットのディレク
トリ(デフォルト: "ローカルソケット")
-p, --port=ポート番号 データベースサーバーのポート番号(デフォルト: "5432")

-U, --username=ユーザー名 データベースのユーザ名(デフォルト: "nakaoka")
-w, --no-password パスワード入力を要求しない
-W, --password パスワードプロンプトを強制表示する
(本来は自動的に表示されるはずです)

詳細は psql の中で "\?" (内部コマンドの場合) または "\help"
(SQL コマンドの場合) をタイプするか、PostgreSQL ドキュメントの psql
セクションを参照のこと。

不具合はまで報告してください。

WCFの通信データサイズ制限を調整する。

WCFの受信サイズ制限は、既定で65536となっていて制限を越えた場合はSystem.ServiceModel.CommunicationExceptionが発生します。


System.ServiceModel.CommunicationException が発生しました。
HResult=-2146233087
Message=受信メッセージの最大メッセージ サイズ クォータ (65536) を超えました。このクォータを増やすには、適切なバインド要素の MaxReceivedMessageSize プロパティを使用してください。
Source=mscorlib

対応としては、client側のbinding設定のmaxReceivedMessageSizeを修正します。













以下のサイトも参考にしてください。
http://csharper.blog57.fc2.com/blog-entry-86.html

WCFでAddressAccessDeniedExceptionが発生する場合の対処方法

WCFのHost起動時に以下のメッセージが表示される場合があります。セキュリティ関連のチェックにかかったメッセージで、対処としては管理者で実行するか、実行するユーザに対して権限を与える必要があります。


System.ServiceModel.AddressAccessDeniedException が発生しました。
HResult=-2146233087
Message=HTTP が URL http://+:8080/SampleService/ を登録できませんでした。プロセスにこの名前空間へのアクセス権がありません
(詳細については、http://go.microsoft.com/fwlink/?LinkId=70353 (英語ページの可能性があります) を参照してください)。

権限を与える方法としては、以下のコマンドを実行します。


netsh http add urlacl url=http://+:8080/ user=tekk

以下のサイトを参考にしました。
http://blogs.msdn.com/b/amitlale/archive/2007/01/29/addressaccessdeniedexception-cause-and-solution.aspx