質問

私は見ているマネジ付きテキストの輸入設備(一般的にCSVへのSQL Server2005年)となっているこVB.NET 私は、こうした反C#.していまVS2008年試行錯あるところを知ら始まります。誰でもできるのでも方向にできるようなもの遊びの源泉 非常に 簡単なマルチスレッドの申請VS2008年?

よろしく!

役に立ちましたか?

解決

参照される DevX 第は、2001年から。Net Framework1.1です。Net Framework2.0を提供 BackgroundWorker クラスです。このスレッドクラスのアプリケーションの場合は含まれforeground UI部品です。

から MSDNスレッドネジ:

場合を実行する必要があります背景のスレッド すると、ユーザーインタフェース きます。NET Frameworkバージョン2.0 スBackgroundWorker成 伝えるイベントを使用し、 クロス-スレッドの総力を結集し、 ユーザインタフェースのねじになります。

この例から MSDN BackgroundWorkerクラス を示してバックグラウンドタスクの進捗は、%、cancelオプションです。(例に比べて長くなっDevXサンプルが街の人々がとても親切でやさしく機能)

Imports System.ComponentModel

Partial Public Class Page
    Inherits UserControl
    Private bw As BackgroundWorker = New BackgroundWorker

    Public Sub New()
        InitializeComponent()

        bw.WorkerReportsProgress = True
        bw.WorkerSupportsCancellation = True
        AddHandler bw.DoWork, AddressOf bw_DoWork
        AddHandler bw.ProgressChanged, AddressOf bw_ProgressChanged
        AddHandler bw.RunWorkerCompleted, AddressOf bw_RunWorkerCompleted

    End Sub
    Private Sub buttonStart_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)
        If Not bw.IsBusy = True Then
            bw.RunWorkerAsync()
        End If
    End Sub
    Private Sub buttonCancel_Click(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)
        If bw.WorkerSupportsCancellation = True Then
            bw.CancelAsync()
        End If
    End Sub
    Private Sub bw_DoWork(ByVal sender As Object, ByVal e As DoWorkEventArgs)
        Dim worker As BackgroundWorker = CType(sender, BackgroundWorker)

        For i = 1 To 10
            If bw.CancellationPending = True Then
                e.Cancel = True
                Exit For
            Else
                ' Perform a time consuming operation and report progress.
                System.Threading.Thread.Sleep(500)
                bw.ReportProgress(i * 10)
            End If
        Next
    End Sub
    Private Sub bw_RunWorkerCompleted(ByVal sender As Object, ByVal e As RunWorkerCompletedEventArgs)
        If e.Cancelled = True Then
            Me.tbProgress.Text = "Canceled!"
        ElseIf e.Error IsNot Nothing Then
            Me.tbProgress.Text = "Error: " & e.Error.Message
        Else
            Me.tbProgress.Text = "Done!"
        End If
    End Sub
    Private Sub bw_ProgressChanged(ByVal sender As Object, ByVal e As ProgressChangedEventArgs)
        Me.tbProgress.Text = e.ProgressPercentage.ToString() & "%"
    End Sub
End Class

他のヒント

この記事:

http://www.devx.com/DevX/10MinuteSolution/20365

特に次の点が重要です。

Dim t As Thread
t = New Thread(AddressOf Me.BackgroundProcess)
t.Start()

Private Sub BackgroundProcess()
   Dim i As Integer = 1
   Do While True
        ListBox1.Items.Add("Iterations: " + i)
        i += 1
        Thread.CurrentThread.Sleep(2000)
   Loop
End Sub

最高のスレッドの文書もあったが、この http://www.albahari.com/threading/

この問題の簡単な例であるという単純過ぎます。ロサンゼルス生まれ、過去の計数またはソートに背景のデモでは一般に更新する必要があるUIのまたは類似のもgotchas.同様に使って資源の競合が簡単な例をスレッドが低下優雅にリソースでは利用できないなどのDb接続が必要です。

概念的には必要なかんにするスレッドがどのように多ください。あにまつわるオーバーヘッドの管理にスレッドおよび一部の機構共用スレッドプールと資源争そのもの(例えば、時間を走行するプログラムだけを表示空の形で、多くのスレッドでご覧ください下のタスク管理事務所サービスメニュー

なお場合、スレッドの実際のアップロードに必要な信号に戻り合いの完成だったか(何に失敗した).のコントローラーのニーズに取引できるようになるとその管理の開始/停止プロセスです。

最後にどのように、仮にものを作りマルチスレッドの増加能しない、常にtrueです。場合例えば、chopファイルへのセグメントまっており、これに適応するために旅行全体の低速のリンク(ADSLとします)には、制約による外力のない量のスレッドtrickeryは周りを取得する。同で応募できるデータベースの更新、ウェブ請求、なんでもinvloving大量のディスクi/oです。

もかかわらず、こんに御使い(祝福と平安を)のドゥーム.の参考にこちらより十分のためのお手伝いをするために何をしたいのがこの理由の一つはネジのように複雑でき:)

したい場合は制御のBackgroundWorker/Threadpoolでなけたいと思い自分が少なくとも二つの非常に良いfreebieスレッド図書館をノックの場所(Wintellect&PowerThreading)

乾杯

サイモン

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top