2007/12/31

BeginInvoke

C#でWiimoteLibいじってて、C#について気づいたことの備忘録。。。

下記のようなソースでWiimoteChanged()が別スレッドで実行されていた場合に、WiimoteChanged()の中でフォームオブジェクトにアクセスすると"別スレッドから実行された"とのエラー(警告)が出てしまう。

この場合にBeginInvokeで非同期(遅延?)呼び出しとやらを使ってあげると、BeginInvokeで指定した関数はメインスレッドで実行されるらしい。


たとえばメインスレッドで実行されるForm1()のスレッドIDが10で、WiimoteChanged()がスレッドID11で実行されたとする。

ここで、WiimoteChanged()からBeginInvoke()で実行されるUpdateWiimoteState()はスレッドID10で動くようだ。


ってことはソケットとかのイベントで別スレッドからデリゲート関数が実行された場合は、BeginInvoke()で実際の処理を呼び出してあげればいいのかな?
ただ、BeginInvoke()で調べてると、BeginInvoke()で呼び出す関数にはいろいろと制約があるらしいので、このあたりはもう少し調査する必要アリかな?

Invoke()だとかBeginInvoke()の話はここを見れば詳しく分かりそうですね。



private delegate void UpdateWiimoteStateDelegate(
WiimoteChangedEventArgs args );

private Wiimote wiimote = new Wiimote();

public Form1()
{
Debug.WriteLine( "Form1 Thread id : " +
Thread.CurrentThread.ManagedThreadId );

InitializeComponent();

wiimote.WiimoteChanged += new WiimoteChangedEventHandler(
WiimoteChanged );
}

private void UpdateWiimoteState( WiimoteChangedEventArgs args )
{
Debug.WriteLine( "UpdateWiimoteState Thread id : " +
Thread.CurrentThread.ManagedThreadId );
}

private void WiimoteChanged( object sender, WiimoteChangedEventArgs args )
{
Debug.WriteLine( "WiimoteChanged Thread id : " +
Thread.CurrentThread.ManagedThreadId );
BeginInvoke( new UpdateWiimoteStateDelegate( UpdateWiimoteState ),
args );
}

2007/12/30

WiiのコントローラでPCを操作

会社も今年の業務は終了しやっと時間が取れるようになったので、先日書いたとおりBluetoothでWiiコントローラと通信させてみました。

Wiiにコントローラを接続する要領で、PCのBluetoothアプリを接続待ち状態にしてWiiコントローラの1,2ボタンを同時に押すとあっさり接続が完了。

Wii入力ライブラリであるWiimoteLibを立ち上げて動作テスト。
このライブラリはWindowsのmanagedライブラリなのでC#やVB.NETで扱うことができるみたい。

お~~!!
繋がってる!!




ついでにWiiコントローラでPCを操作できるWiiRemoteも使ってみる。。。


おおぉぉ~~!!
WiiコントローラでPCがいじれる!!

これで準備は整ったので、自分でもアプリケーションを作ってみようかな。
VS2008も出たしC#の勉強がてらね。

2007/12/28

trac+Subversion+TortoiseSVN

前々から使いたかったこのセットを今日の仕事の合間に入れてみました( ´∀`)

Trac自体はAll-in-one-tracであっという間に入るんだけど、問題はTortoiseSVNからのアクセス方法。。。

と言うかURL?

ぐぐっても意外と出てこないのね(;´Д`)


やっとこさ、見つけたのがココ


おかげさまで助かった( ´∀`)


結局アクセスURLは"http://:<ポート>/svn/<プロジェクト名>"らしい。
プロジェクト名は初期状態ではdefaultに設定されるようですね☆


やっとこさ環境が整ったので、以降の仕事はSubversion使おっと♪

あとはEclipseとの連接とかできたらいいな。。。
その前にEclipseでレゴ用のgcc動かせるようにしないと^^;

2007/12/27

Bluetooth

今日ちょいとプリンストンのBluetoothアダプタを購入しました☆




Bluetoothアダプタはかさばるのが多いんだけど、これはとても小さいので挿しっぱなしでもOK♪

ということで早速挿してみた。。。



んーいいカンジ( ´∀`)



これでWiiとくっつけて遊べるかな??


いやぁ~、コレ↓がしたいんだよね~( ´∀`)
#とりあえずプロジェクタを買ってと会社に相談中(笑)

2007/12/25

ディスプレイ

がもう一台ほしいなぁ。。。
会社はデュアルディスプレイでとても快適なんだよなぁ~(笑)

Virtual PCとかVMWare使ってるとどうしても一台じゃ狭いし、全画面で使う人だからワイドディスプレイじゃダメなんだよね^^;

17インチでいいから1万ほどで買えるし、1月の年末調整での戻り額次第で買いたいな☆

あとは置くスペースをいかに確保するか。。。だな(;´Д`)

2007/12/21

Visual Studio 2008

先日MSDNにUPされたISOイメージが壊れてたみたいでインストールできなかったVS2008。。。

今日また除いてみると再UPされていたようなのでDL。

インストールしてみると。。。


お、できた^^


ただいまインストール中。。。