3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。(jehupc.exblog.jpから移転中)

(.Net)フォームを非表示で起動する

タスクトレイに常駐するアプリケーションを作ってます。指定された時間おきにWEBコンテンツの更新を確認するツールなんですが、マルチスレッド構成とし、コンテンツの更新確認は別スレッドで行っています。

で、フォームを非表示にして起動する方法ですが、とりあえずDOBON.NET:フォームを表示させずにトレイアイコンを表示するを参考にしました。

最初にとった方法はパラメータを指定せずにApplication.Runを呼び出す方法です。

こんな感じです。(C#)

///

/// アプリケーションのメイン エントリ ポイントです。

///

[STAThread]

static void Main()

{

//フォーム(Form1)のインスタンスを作成

Form1 f1 = new Form1();

//メッセージループを開始する

Application.Run();

}

このアプリケーションはサブスレッドからメインスレッドで生成したダイアログウィンドウを表示して、コンテンツの更新があったらそのダイアログウィンドウに表示するようにしたいんですが、上記のApplication.Runを呼び出す方法だとそれができません。

で、悩んでいたら[C#] 常駐アプリ+マルチ スレッドは要注意: いげ太のブログというのを見つけました。

なるほど、上記の方法だとコントロールがどのスレッドにもバインドされてないからダメということですかね。常駐アプリでマルチスレッドはややこしいそうです。

とりあえず、上記ブログで言及されている CreateParams をオーバーライドする方法をとってみました。(DOBON.NETの方にも出ててます。)

しかしやってみたものの、何故かフォームが表示されてしまいます。

悩んだ挙句気付いたのがデザイナの方で、WindowState プロパティを Minimized にしていました。

このプロパティを Normal にすると非表示で起動可能となりまあした。

こんな単純なことに気付くのに1時間かかってしまいましたよorz...