環境: WinXP(SP3) , VB2005 , Oracle9i
で StatusStrip についてご教授願います。
やりたいこと:
①Button を押したら StatusStrip に「データ表示中・・・しばらくお待ち下さい」を表示
②①と同じイベント内でデータを SPREAD にバインド
③①と同じイベント内で StatusStrip に 「○○件表示しました」を表示
上記三つを一つのボタンクリックイベントに記述すると
①が表示されずに③だけが表示されます。
なにか StatusStrip の設定等があるのでしょうか?
宜しくお願いします。
-- コード --
Private Sub BtnHyouji_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnHyouji.Click
Me.Cursor = Cursors.WaitCursor
Str1.Items(0).Text = "データ表示中・・・しばらくお待ち下さい。" --①
-- データ表示処理 --
Str1.Items(0).Text = SS.Sheets(0).RowCount.ToString("#,0") & "件表示しました。" --③
単に処理2が一瞬で終わっているから、1が見えないとかではないのですか?
処理2にはそれなりの時間がかかっているのでしょうか?
aetos さんご返信ありがとうございます。
処理2には30Sほどかかるのですが
処理2中は Str1.Items(0).Text には
何も表示されません
処理3をコメントにしていると
処理2中に処理1のメッセージは
表示されます
宜しくお願いします。
自分が処理をしている最中は,原則的に表示は更新されません。
Str1.Refreshを呼び出してみてください。
MSDN: Control.Refresh メソッド (System.Windows.Forms)
http://msdn.microsoft.com/ja-jp/library/system.windows.forms.control.refresh.aspx
----
本来的な方法としては,処理2をバックグラウンドスレッドに処理させることですが,
データバインド処理自体に時間がかかっているならば,UI側でやらざるを得ません。
バインド処理の前に例えばOracleにSELECT文を発行しているような場合で,バインド自体ではなくデータ取得処理に時間がかかっているのであれば,
データ取得処理をバックグラウンドスレッドに行わせるようにしてください。
MSDN: BackgroundWorker クラス (System.ComponentModel)
http://msdn.microsoft.com/ja-jp/library/system.componentmodel.backgroundworker.aspx
Blog: マルチスレッド Windows フォームアプリケーションの開発 - とあるコンサルタントのつぶやき - Site Home - MSDN Blogs
http://blogs.msdn.com/b/nakama/archive/2009/03/30/windows.aspx
Blog: Part 1. Windows フォームのマルチスレッド処理の基礎 - とあるコンサルタントのつぶやき - Site Home - MSDN Blogs
http://blogs.msdn.com/b/nakama/archive/2009/03/31/part-1-windows.aspx
Blog: タスクスレッドの起動方法 - とあるコンサルタントのつぶやき - Site Home - MSDN Blogs
http://blogs.msdn.com/b/nakama/archive/2009/04/02/9521640.aspx
Blog: Part 3. タスクスレッドと UI の協調動作 - とあるコンサルタントのつぶやき - Site Home - MSDN Blogs
http://blogs.msdn.com/b/nakama/archive/2009/04/07/part-3-ui.aspx
Blog: Part 4. Visual Studio によるマルチスレッドアプリの開発 - とあるコンサルタントのつぶやき - Site Home - MSDN Blogs
http://blogs.msdn.com/b/nakama/archive/2009/04/09/part-4-visual-studio.aspx
YuO さん
アドバイスありがとうございます。
今別件の仕事があり直ぐに試せないので
結果が出次第ご報告したいと思っております。
YuO さん
Str1.Refresh で目的は達成できました。
ありがとうございました。
また、これからバッググラウンド処理の方も
勉強していきたいと思っております。
ツイート | ![]() |