C# | どう書く?org 出力の一時停止と再開

 久し振りに面白そうなトピックが出てきたので書いてみました。

http://ja.doukaku.org/comment/6359/

http://ja.doukaku.org/comment/6361/

 書いてから気付いたのですが、ネットで記事を読んだりして知ってはいたけど、実際にマルチスレッドでプログラミングするのは初めてでした。

 結構楽しいですね。

キーボードを新調しました。

 メーカー純正のキーボードのFキーとJキーが磨り減ってきたので、キーボードを新調しました。

Owltech キーボード KFK-109PS2

 タッチ音がとても静かです。友人を付き合わせて電気屋を数件回り、やっと見付けたお気に入りです。

 タッチ、キー配置、値段の最大公約数です。2000円位で買いました。展示している限りのキーボードを触りました。感触の良いキーボードは例外なく高いです。

 色々と弄っていると、どうやらメカニカルタイプのキーボードのタッチが好みのようです。しかし、高いです。

 手当たりしだいに弄っていると、どう見ても2000円しないだろうという地味な見た目のキーボードのタッチが最高なので、即決と思ったら、うわさのリアルフォースで、値段を聞いたら1万7千円くらいとのことでぶっ飛んだりしました。

 そんなこんなで、なんとか妥協出来るものを見付けて、そのキーボードでこの記事を書いています。

 悪くないです。普通のキーボードです。強いて特徴を挙げれば、タッチ音が静かなことです。パチンという高い音ではなく、カチョッっというような響かない音です。

 まぁ大事に使おうと思います。

2008年4月20日の走行記録

 今年ロード初乗りです。支笏湖まで行ってきました。千歳~支笏湖温泉辺りまで行って、のりさんととりさんと落ち合い、一緒に千歳まで引き返しました。

 やっぱ楽しいです。でも、翌日に筋肉痛が…。朝に走って、夕方に筋肉痛になって、夜には治ってた頃が懐かしいです。

 詳細は面倒なので書きません。

 サイコンデータ

走行距離 64.76km

平均速度 23.5km/h

最高速度 51.3km/h

走行時間 2h45m07s

C#|プログラミングに魔法なんてない

HogeクラスからPiyoクラスをインスタンシング。

その時、PiyoクラスのコンストラクタでHogeクラスの参照を渡す

Piyoクラス内にHogeクラスのhogeHogeイベントのイベントプロシージャを作成

PiyoクラスDispose();

HogeクラスでhogeHogeイベント発生。

エラー発生、破棄されたオブジェクトにアクセス出来ません云々。

こんな感じです。油断してました。+=したエベントプロシージャはちゃんと-=で後始末しないといけませんね。VB.NETで言うと、AddHandler,RemoveHandler、だったかな?

なんていうか、その…、

ごめんなさい。

C#|二重起動を禁止して、コマンドライン引数を取得

 ”C# 二重起動 禁止”等で検索するとMutexを使った方法を紹介したページがヒットしますが、これでは後から起動されようとしたインスタンスのコマンドライン引数を取得出来ません。

 自分で、既に起動済みのインスタンスにコマンドラインを渡して、受け側で処理する様に実装しなければいけません。これでは面倒です。VB.NET 2005では簡単に二重起動を禁止して、引数も取得出来ました。

 同じクラスライブラリなのだから、VBに出来てC#に出来ない筈は無いと考え、調べてみました。下準備をすればVBと同じ方法で二重起動を禁止し、引数も取得出来ることがわかりました。以下にその方法を紹介します。

まず、”Microsoft.VisualBasic”をプロジェクトの参照に追加します。

そして、次の様にクラスを書きます。

using System.IO;
using Microsoft.VisualBasic.ApplicationServices;
class myApplication:WindowsFormsApplicationBase{
  public myApplication()
    : base() {
    this.EnableVisualStyles = true;
    this.IsSingleInstance = true;
    this.MainForm = new Form1();//スタートアップフォームを設定
    this.StartupNextInstance += new StartupNextInstanceEventHandler(myApplication_StartupNextInstance);
  }
   void myApplication_StartupNextInstance(object sender, StartupNextInstanceEventArgs e) {
    //ここに二重起動されたときの処理を書く
    //e.CommandLineでコマンドライン引数を取得出来る
  }
}

myApplication_StartupNextInstanceメソッドの中には、VB.NETの方法の時と同じ様にコーディング出来ます。詳しくは検索すればわかりやすいページがあるでしょう。

次に、プログラムのエントリポイントを書き換えます。

using System;
static class Program {
  [STAThread]
  static void Main(string[] args) {
    //Application.EnableVisualStyles();
    //Application.SetCompatibleTextRenderingDefault(false);
    //Application.Run(new Form1());
    myApplication winAppBase = new myApplication();
    winAppBase.Run(args);
  }
}

 こんなに簡単な方法があるのに、検索しても紹介されているのを見たことがありません。この方法に何か問題があるのかも知れませんね。

 知っている方がいましたらコメント下さい。