- - PR -
Windows サービスでInvoke
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-05-28 19:21
お世話になっております。おおのです。
VB2008にてWindows サービスを開発しているのですが、 マルチスレッドで動作している処理に関して、メインスレッドに 処理を移したいのですが、Windows Formで可能なMe.Invokeが サービスで出来ません。 何か方法はあるのでしょうか? また、SyncLockを用いて、複数スレッドが同時に動作しないように しようとしていたのですが、これもうまくいきませんでした。 (大文字小文字は適当) class service1 private l as new object sub a synclock l 処理 end synclock end sub sub b synclock l 処理 end synclock end sub end class こんな具合にしているのですが、うまく動作しません。 質問だらけで申し訳ありませんが、教えてください。 よろしくお願いします。 | ||||||||
|
投稿日時: 2008-06-04 10:34
「処理を移したい」という表現が若干気になりますが。 普通にdelegateを作成してInvokeすれば可能です。
どう動作しないのかがわかりません。 そのコードをどういった意図でかいたのか不明ですが、 動かない理由は見当たりません。 書かれたとおりに動くと思います。 | ||||||||
|
投稿日時: 2008-06-10 14:15
すみません。気付くのが遅くなりました。
Windows フォームの場合は(VB)Me.Invokeで可能ですが、 サービスの場合は、使うことが出来ません。 「サービス Invoke」等で検索しても的外れな結果しか出なかったので、 こちらに参りました。 目的としては、socketクラスで接続イベント、受信イベント、切断イベントを 発生させようとしたものの、スレッドセーフではないため、何とかならないかと 思っていました。 ロック処理につながるのですが、Jetのマルチスレッド処理をどうにか 避けようとした次第であります。
こちらも上と同様、マルチスレッドを避けようとした次第であります。 SQLを使いたいのは山々なのですが・・・ class service1 private l as new object sub a synclock l debug.print("a-start") 処理 debug.print("a-end") end synclock end sub sub b synclock l debug.print("b-start") 処理 debug.print("b-end") end synclock end sub end class とこんな具合に書くと、想像では、a-startとb-startが立て続けに 出力されることはないと思ったのですが・・・ (a-start > a-end > b-start...) 私の勘違いなのかもしれません。 気付くのが遅くなり、すみませんでした。 [ メッセージ編集済み 編集者: おおの 編集日時 2008-06-11 09:55 ] |
1