C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 99 を表示中)
■58902 / )  Re[4]: BackgroundWorker処理中に砂時計が"I"になる
□投稿者/ あころ (3回)-(2011/05/03(Tue) 16:55:24)
2011/05/03(Tue) 16:57:23 編集(投稿者)
No58901 (Azulean さん) に返信
> ■No58900 (あころ さん) に返信
>>Application.UseWaitCursorを使用しても動作は変わりませんでした。Ibeamになります。
> 
> フォーム上、すべての場所でそうなるのですか?
> 特定のコントロール上でそうなるのですか?
> フォームはどのようなコントロールで構成されていますか?
> (テキストボックスが全体にあるとかそういったこともないですよね?)
> DoWork イベントの中を Sleep(5000); だけにした場合もカーソルがそうなりますか?(処理に依存しない?)
> 
> 
> 正直なところ、第三者が推測するには材料が足りません。

返信ありがとうございます。Azuleanさんの書き込みがヒントになり、Ibeamになる場所がわかりました。
backgroundWorker1_RunWorkerCompleted中で、Textboxのコントロールの描画を一時停止をしていました。
WM_SETREDRAW メッセージを送るとアイコンがIbeamになります。コメントアウトすると砂時計になります。

        private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            SendMessage(this.Handle, WM_SETREDRAW, Win32False, 0);    ←ここ
            foreach (string ss in aArrayList)
            {
                TextBox1.AppendText(ss);
            }
            SendMessage(this.Handle, WM_SETREDRAW, Win32True, 0);
            this.Refresh();
            this.Cursor = Cursors.Default;
            button1.Enabled = true;
            button1.Text = "開始";
        }

しかし、WM_SETREDRAWメッセージを送るとなぜIbeamになるのかが、解っていません。
もうすこし調べてみます。もしヒントがあれば、ご教授おねがいします。


ご質問について
フォーム上、すべての場所でそうなるのですか?
=>はい、Ibeamになります。

特定のコントロール上でそうなるのですか?
=>いいえ、すべてIbeamになります。

フォームはどのようなコントロールで構成されていますか?
=>textbox1 ,button1,backgroundWorker1になります。計算結果をtextbox1に最後に表示しています。

DoWork イベントの中を Sleep(5000); だけにした場合もカーソルがそうなりますか?(処理に依存しない?)
=>カーソルは砂時計になります。(思いどおりの動作)





返信 編集キー/


管理者用

- Child Tree -