VB6.0用掲示板の過去のログ(No.2)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [管理用]

投稿日: 2005/11/14(Mon) 22:45
投稿者G13
Eメール
URL
タイトルRe^6: OnCommイベントについて

> G13様、 様、ご返信ありがとうございます。
>
> > 要するにPortOpen前に受信したデータがあると、Openと同時にOnCommイベントが発生する
> > のを防ぎたいということでしょうか?。
> はい、その通りです。ですが、Openと同時にOnCommイベントが発生しないときもあります。
> また、「受信開始」ボタン押下前に送られてこない場合もあります。
> (説明不足でした。すみません。)
>
> > OnCommイベント時のCommEventプロパティを調べて下さい。
> > 多分、comEvReceiveが発生していると思われます。
> はい、comEvReceiveが発生しています。
>
> > RThresholdプロパティを0にしておき、PortOpen = True 後に InBufferCountで受信バイト
> > 数を検定し、1以上なら不要データとして、InBufferCount = 0とすればクリアされませんか
?。
> > その後、RThresholdプロパティを30に再設定することでOnCommイベントも回避できませんか
?。
> 必ず発生する問題ではないため、

> comMSComm.RThreshold = 0
> comMSComm.PortOpen = True
> If comMSComm.InBufferCount > 0 then
> comMSComm.InBufferCount = 0
> comMSComm.RThreshold = 30
> End If
> としますと、発生しなかったときは「受信開始」ボタン押下後も受信できなくなってしまいました

当たり前です。
If comMSComm.InBufferCount > 0 then 0以上でない場合は
comMSComm.RThreshold = 30を設定できないからです。

> ElseIF comMSComm.InBufferCount = 0 then
> comMSComm.RThreshold = 30
> End If
> を追加しますと、元の問題が発生する状態になりました。
ここはいらないです。

comMSComm.RThreshold = 30
で良いように思えますが?。

> 解決しようといろいろ調べてみました。
> PortOpen = True 前に送信されると、InBufferCountプロパティに格納されるようです。
> comMSComm.InBufferCount = 0
> としましても、「受信開始」ボタン処理が終了後、OnCommイベントが発生し、
> comEvReceiveが発生しています。
> (確かに縁を切ったと思った値がいつの間にか存在している・・・orz)

当たり前のように思えますが、
comMSComm.RThreshold = 30としているからではないですか?。

ちょっと試せる環境がないので申し訳ないですけど。


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- VBレスキュー(花ちゃん) - - Web Forum -