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

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

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

Re[1]: Sleepメソッドを連続で呼ぶとハングアップ


(過去ログ 45 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■24075 / inTopicNo.1)  Sleepメソッドを連続で呼ぶとハングアップ
  
□投稿者/ ながせ (4回)-(2008/08/27(Wed) 14:35:54)

分類:[VB.NET/VB2005] 

お世話になります。
VB.NET 2008にて、以下のような用途でSystem.Threading.Thread.Sleepを使用すると、ハングアップ状態になってしまいます。

コードは次のとおりです。(Form1にButton1が配置されているものと仮定します)
'---------------------------------------------------------------------------------------------------------------
Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        For i = 1 To 100
            System.Threading.Thread.Sleep(300)
            ' 規定の処理を実行。300ms刻みで100回行いたい
        Next
    End Sub
End Class
'---------------------------------------------------------------------------------------------------------------

Sleepメソッドを使う以外に、規定の時間ウェイトを待たせる方法はありますでしょうか?
アプリケーションはシングルスレッドです。よろしくおねがいします。

引用返信 編集キー/
■24076 / inTopicNo.2)  Re[1]: Sleepメソッドを連続で呼ぶとハングアップ
□投稿者/ やじゅ (585回)-(2008/08/27(Wed) 14:41:05)
やじゅ さんの Web サイト
No24075 (ながせ さん) に返信
> お世話になります。
> VB.NET 2008にて、以下のような用途でSystem.Threading.Thread.Sleepを使用すると、ハングアップ状態になってしまいます。
>

ハングアップ状態に見えてるだけですかね、Application.DoEvents()をループ中に入れてみるとか

'待機中のイベントを処理する
Application.DoEvents()
http://dobon.net/vb/dotnet/programing/abortprocess.html
引用返信 編集キー/
■24079 / inTopicNo.3)  Re[2]: Sleepメソッドを連続で呼ぶとハングアップ
□投稿者/ れい (754回)-(2008/08/27(Wed) 14:48:53)

System.Windows.Forms.Timerを使えばよいと思います。

No24076 (やじゅ さん) に返信
> ハングアップ状態に見えてるだけですかね、Application.DoEvents()をループ中に入れてみるとか

DoEventsを勧める前に
Timerを薦めたほうがよいのではないかと。
引用返信 編集キー/
■24084 / inTopicNo.4)  Re[2]: Sleepメソッドを連続で呼ぶとハングアップ
□投稿者/ ながせ (5回)-(2008/08/27(Wed) 15:01:28)
DoEventsで意図した通りに動作しました。ありがとうございます。
このメソッドを呼ばないと、メッセージキューにあるWindowsメッセージが処理できないのですね。

No24076 (やじゅ さん) に返信
> ■No24075 (ながせ さん) に返信
>>お世話になります。
>>VB.NET 2008にて、以下のような用途でSystem.Threading.Thread.Sleepを使用すると、ハングアップ状態になってしまいます。
>>
>
> ハングアップ状態に見えてるだけですかね、Application.DoEvents()をループ中に入れてみるとか
>
> '待機中のイベントを処理する
> Application.DoEvents()
> http://dobon.net/vb/dotnet/programing/abortprocess.html


引用返信 編集キー/
■24085 / inTopicNo.5)  Re[3]: Sleepメソッドを連続で呼ぶとハングアップ
□投稿者/ ながせ (6回)-(2008/08/27(Wed) 15:02:49)
Timerでも解決できそうですね。
Timerを使うとDelegateを使うことになり、作りを変えないといけなくなりますので次回なにか作成するときに
参考にさせてくらいます。ありがとうございます。

No24079 (れい さん) に返信
>
> System.Windows.Forms.Timerを使えばよいと思います。
>
> ■No24076 (やじゅ さん) に返信
>>ハングアップ状態に見えてるだけですかね、Application.DoEvents()をループ中に入れてみるとか
>
> DoEventsを勧める前に
> Timerを薦めたほうがよいのではないかと。
引用返信 編集キー/
■24086 / inTopicNo.6)  Re[4]: Sleepメソッドを連続で呼ぶとハングアップ
□投稿者/ れい (757回)-(2008/08/27(Wed) 15:11:36)
No24085 (ながせ さん) に返信
> Timerでも解決できそうですね。
> Timerを使うとDelegateを使うことになり、作りを変えないといけなくなりますので次回なにか作成するときに
> 参考にさせてくらいます。ありがとうございます。
>

たぶん、作りを変えたほうがよいと思います。

私の考えはこの辺に書きましたので。
もし読む気があればどうぞ。

http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=2381944&SiteID=7

#一度主張してしまった手前、毎回言わなきゃいけないですね…
引用返信 編集キー/
■24087 / inTopicNo.7)  Re[5]: Sleepメソッドを連続で呼ぶとハングアップ
□投稿者/ ながせ (7回)-(2008/08/27(Wed) 15:32:29)
2008/08/27(Wed) 16:55:58 編集(投稿者)

詳しい考察については、MSDNフォーラムを読ませていただきました。

おっしゃるように、VB.NETでDoEventsと一行書けばとりあえずフタをできますが、
そうしたことでイベント中に別のWindowsメッセージ処理を進めるのも危ないように考えられますね。

No24086 (れい さん) に返信
> ■No24085 (ながせ さん) に返信
>>Timerでも解決できそうですね。
>>Timerを使うとDelegateを使うことになり、作りを変えないといけなくなりますので次回なにか作成するときに
>>参考にさせてくらいます。ありがとうございます。
>>
>
> たぶん、作りを変えたほうがよいと思います。
>
> 私の考えはこの辺に書きましたので。
> もし読む気があればどうぞ。
>
> http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=2381944&SiteID=7
>
> #一度主張してしまった手前、毎回言わなきゃいけないですね…
解決済み
引用返信 編集キー/
■24098 / inTopicNo.8)  Re[1]: Sleepメソッドを連続で呼ぶとハングアップ
□投稿者/ Jitta on the way (162回)-(2008/08/27(Wed) 19:05:36)
No24075 (ながせ さん) に返信
> ' 規定の処理を実行。300ms刻みで100回行いたい

これ、違います。Sleep は、「少なくともその時間は、該当スレッドに処理を回さない」です。このコードは「少なくとも300ms、不定の時間を100回」になります。それが仕様に一致するか、よく考えて下さい。
(れいさんが書かれていることと同じなら失礼)
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -