アプリ版:「スタンプのみでお礼する」機能のリリースについて

いつもココにはお世話になっております。
またよろしくお願いします。

VB.net(Visual Studio Express)を使用しています。
OSはWin7 64Bitです。

Form1にStatusStrip(名前:stsStrip1)を配置してその中にStatusLabel(名前:stsbarLabel1)がある普通のステータスバーがあります。
以下の様な処理をしているのですが、存在しないシリアルポートを設定するとWrite(sndData)で8秒間止まりますが、その間”処理中”が表示されないことが有ります。(1~2秒経って表示されることもある)
どうも、IO処理で待ちの状態になるとステータスバーの表示がうまく更新されないようなのです。
(UDP通信の時も同じ現象でした)

StatusStripの表示を即座に更新させるようなことは出来ないものでしょうか?
よろしくご享受願います。

'=======================================================
stsbarLabel1.Text="処理中"

Try
   SerialPort1.PortName = "COM6"    '存在しないポートを設定
   SerialPort1.WriteTimeout = 8000    'タイムアウト8秒
   SerialPort1.Open()
   SerialPort1.Write(sndData)        '送信
   SerialPort1.Close()
Catch ex As Exception
   エラー処理
End Try
   
stsbarLabel1.Text=""
'=======================================================

A 回答 (1件)

stsbarLabel1.Text="処理中" と書いたからといって直ちに表示される訳では


ありません。
同様の現象がよく見られるのがループ中に ループカウント 等を表示した場合です。

従って、stsbarLabel1.Text="処理中" と書いた直後の行で
stsStrip1.Refresh()
   又は、
Application.DoEvents()
を実行して、強制的に書き換えて見て下さい。
但し、ループ中 に強制的に書き換え処理を頻繁に行うと画面がちらつく事に
なり別の対策が必要になります。

因みに、VB.net(Visual Studio Express)を使用しています。 では通じません。
Visual Basic のバージョンを明記するなら正確に書いて下さい。

VBのバージョン・製品名の一覧
http://hanatyan.sakura.ne.jp/patio/read.cgi?mode …
    • good
    • 0
この回答へのお礼

ありがとうございます!
お陰様で問題をクリアすることが出来ました。
具体的には、Refresh()はStatusStripコントロールには使えないようでして、
Application.DoEvents()を使用することで解決出来ました。

>但し、ループ中 に強制的に書き換え処理を頻繁に行うと画面がちらつく事に
>なり別の対策が必要になります。
今回の場合はループの中で使用することは無いので大丈夫でしたが、覚えておきます。

>因みに、VB.net(Visual Studio Express)を使用しています。 では通じません。
>Visual Basic のバージョンを明記するなら正確に書いて下さい。
仰るとおりです。バージョンを書くのを忘れておりました…
以後気をつけます。
ちなみにバージョンは、Visual Studio 2013(Ver12)です。

本当にありがとうございました。

お礼日時:2014/04/06 12:45

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています