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

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

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

Re[1]: マルチスレッド?


(過去ログ 101 を表示中)

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

■60239 / inTopicNo.1)  マルチスレッド?
  
□投稿者/ ワイワイ (1回)-(2011/06/23(Thu) 15:50:51)

分類:[.NET 全般] 

2つの画面があります。

一つは、Windowsフォームで、もう一つはクラスです。

フォーム→クラスに値を送ります。
結果が返ってきます。

ただ、クラスの処理は長い時間がかかります。

そこで、クラス側で処理が進むたびに、プログレスバーの値を進めることにしました。


今は、クラスの処理が終了後に、フォーム側で一気にプログレスバーを進めています。

クラス側の処理が進むたびに、プログレスバーを進めることはできますか?
引用返信 編集キー/
■60241 / inTopicNo.2)  Re[1]: マルチスレッド?
□投稿者/ 逆運の覇者 (15回)-(2011/06/23(Thu) 16:14:39)
可能です。
ただし、プログレスバーを進めるタイミングと進める量は
人間が決定しなければなりません。


しかし、この場合、果たして表題にあるマルチスレッドが必要でしょうか?
確かに、処理が遅いせいでとまって見えるのは困ります。
なら、処理中もウィンドウメッセージを処理してもらえばいいんです。

↓こちら、参考になると思いますが如何?


時間がかかる処理での「応答なし」を回避するには?
http://www.atmarkit.co.jp/fdotnet/dotnettips/136doevents/doevents.html
引用返信 編集キー/
■60245 / inTopicNo.3)  Re[2]: マルチスレッド?
□投稿者/ επιστημη (2642回)-(2011/06/23(Thu) 21:55:25)
επιστημη さんの Web サイト
> しかし、この場合、果たして表題にあるマルチスレッドが必要でしょうか?
> 確かに、処理が遅いせいでとまって見えるのは困ります。
> なら、処理中もウィンドウメッセージを処理してもらえばいいんです。

あるいはBackgroundWorkerがお手軽ですかねー
https://skydrive.live.com/?cid=07c558f8e11e708f&sc=documents&uc=1&id=7C558F8E11E708F%21678#


引用返信 編集キー/
■60246 / inTopicNo.4)  Re[1]: マルチスレッド?
□投稿者/ shu (805回)-(2011/06/23(Thu) 22:07:09)
No60239 (ワイワイ さん) に返信

BackGroundWorker VB.NETです。

Form1にはBackgroundWorkerのBackgroundWorker1とProgressバーがあります。
Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Button1.Enabled = False
        BackgroundWorker1.RunWorkerAsync()
    End Sub

    Private Sub BackgroundWorker1_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
        Dim obj1 As New Class1()
        obj1.BG = BackgroundWorker1
        For i = 0 To 9
            obj1.StPer = i * 10
            obj1.Exec()
        Next
    End Sub

    Private Sub BackgroundWorker1_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles BackgroundWorker1.ProgressChanged
        ProgressBar1.Value = e.ProgressPercentage
    End Sub

    Private Sub BackgroundWorker1_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
        Button1.Enabled = True
    End Sub

End Class


Public Class Class1
    Public Property StPer As Integer
    Public Property BG As BackgroundWorker

    Public Sub Exec()
        For i = 0 To 9
            Threading.Thread.Sleep(100) '時間のかかる処理
            BG.ReportProgress(StPer + i)
        Next
    End Sub

End Class

引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -