- PR -

【C#】Winアプリの複数起動時の処理について

1
投稿者投稿内容
ax stone
会議室デビュー日: 2006/07/07
投稿数: 16
投稿日時: 2008-04-24 19:56
C#.NETでWinアプリを作成しています。
同アプリを別プロセスで複数起動した場合、1つめのアプリの処理中は2つめ以降のアプリは処理を待機し、1つめのアプリの処理が終了した後、2つめのアプリの処理が始まるといった動きをさせたいと考えています。
mutexクラスを使うことで、このような動きにはなったのですが、
1つめのアプリが処理中に、2つ目以降のアプリのウインドウが全く触れなくて困ってます。
1つめのアプリが処理中に、2つ目以降のアプリを最少化したり、場所を移動するような処理をしたいと考えています。
解決策ありましたらご教授ください。
よろしくお願いします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2008-04-24 20:25
mutexの解放まちでブロックしているからでしょう。
タイマーで定期的にチェックし、解放まちではブロックしないようにします。すると、フォーム上のコントロールがさわれてしまいますが、formのenabledをfalseにしてしまえばいいでしょう。
ax stone
会議室デビュー日: 2006/07/07
投稿数: 16
投稿日時: 2008-04-25 18:29
返答ありがとうございます。。

引用:

Jittaさんの書き込み (2008-04-24 20:25) より:

タイマーで定期的にチェックし、解放まちではブロックしないようにします。




現状は、以下のようにしています。
if (hMutex.WaitOne(-1, false))
{
  //処理
  hMutex.ReleaseMutex();//解放
}

解放まちではブロックしないようにとは、
具体的にどのようにすれば良いのでしょうか?


Azulean
大ベテラン
会議室デビュー日: 2008/01/04
投稿数: 123
お住まい・勤務地: 大阪府
投稿日時: 2008-04-25 23:28
まずは、ご自分が書かれたコードが何を意味しているのかを理解して下さい。
http://msdn2.microsoft.com/ja-jp/library/kzy257t0.aspx


ここで「ブロックする」とは状態が変わるまでずっとコードが動かない状態を指しています。
先のメソッドの引数に適切な値を指定し、タイマーコントロールか何かで定期的にチェックするようにすれば良いでしょう。

※ループで待ってはいけません。ループで待つことはブロックすることと同じです。
ax stone
会議室デビュー日: 2006/07/07
投稿数: 16
投稿日時: 2008-04-28 18:16
タイマーコントロールで出来るようになりました。。
ご回答ありがとうございました。。
1

スキルアップ/キャリアアップ(JOB@IT)