- PR -

Windows サービスでInvoke

1
投稿者投稿内容
おおの
会議室デビュー日: 2008/01/28
投稿数: 6
投稿日時: 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

こんな具合にしているのですが、うまく動作しません。

質問だらけで申し訳ありませんが、教えてください。
よろしくお願いします。
れい
ぬし
会議室デビュー日: 2005/11/01
投稿数: 346
投稿日時: 2008-06-04 10:34
引用:

おおのさんの書き込み (2008-05-28 19:21) より:
VB2008にてWindows サービスを開発しているのですが、
マルチスレッドで動作している処理に関して、メインスレッドに
処理を移したいのですが、Windows Formで可能なMe.Invokeが
サービスで出来ません。



「処理を移したい」という表現が若干気になりますが。
普通にdelegateを作成してInvokeすれば可能です。

引用:

こんな具合にしているのですが、うまく動作しません。



どう動作しないのかがわかりません。
そのコードをどういった意図でかいたのか不明ですが、
動かない理由は見当たりません。

書かれたとおりに動くと思います。
おおの
会議室デビュー日: 2008/01/28
投稿数: 6
投稿日時: 2008-06-10 14:15
すみません。気付くのが遅くなりました。

引用:

「処理を移したい」という表現が若干気になりますが。
普通にdelegateを作成してInvokeすれば可能です。


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

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