문제

나를 구축을 찾고 멀티스레드 텍스트를 가져오기 시설(일반적으로 CSV 으로 SQL Server2005)고 싶어 이렇게 VB.NET 하지만 나에 대하여 C#.가 VS2008 평가고 어디서 시작됩니다.보서의 방향이 어디에서 볼 수 있으로 재생의 원 간단한 멀티 스레드 응용 프로그램를 위한 VS2008?

감사합니다!

도움이 되었습니까?

해결책

참조 DevX 문서는 2001.Net Framework1.1 지만,오늘입니다.Net Framework2.0 제공 BackgroundWorker 클래스입니다.이것은 권장되는 스레딩 클래스는 응용 프로그램에 포함되어 있는 경우는 전경 UI 구성 요소입니다.

MSDN 스레드 및 스레딩:

실행해야 하는 경우에는 백그라운드 스레드 는 사용자와 상호 작용,인터페이스 니다.NET Framework version2.0 제공 BackgroundWorker 구성 요소 는 통신을 사용하여 이벤트 크로스-스레드 마샬링을 사용자 인터페이스는 스레드가 있습니다.

이 예제에서 MSDN BackgroundWorker 클래스 쇼 백그라운드 작업을 진행%,취소 옵션입니다.(예보다 더 긴 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 를 업데이트 또는 이와 유사한 몇 가지게 되었.마찬가지로 당신은 거의 다루어야 리소스 경쟁에서 간단한 예제는 스레드가 정상적으로 저하면 리소스 사용할 수 없(등으로 Db 연결)는 생각을 요구한다.

개념적으로 결정을 해야 하는 방법 당신에게 배포하기 위해 귀하의 작업에서 쓰레드와 얼마나 많은 하십시오.가의 오버헤드 관리와 관련된 스레드부 메커니즘을 사용유 스레드 풀을 대상이 될 수 있는 리소스의 경합체(예를 들어,어떤 시간 프로그램을 실행하는 단순히 표시 빈 양식을 얼마나 많은 스레드에 당신은에서 작업 관리자).

그래서 당신의 경우,당신은 스레드를 실제로 업로드 할 필요 신호 경우 다시 그들은 완료된 경우,그들은 실패한(그리고 실패했).컨트롤러가 필요할 수 있는 그들을 다루고 관리하는 시작/중지 프로세스 및입니다.

마지막으로(거의)가정,무언가를 만드는 멀티스레드 성능을 증가시킬 것이다하지 않는 항상 진실하다.는 경우 예를 들어,당신은 잘라 파일로 세그먼트 그러나 그것을 가로 질러 여행이 낮은 속도로 링크(ADSL)말,당신이 제한에 의해 외부의 힘이 없는 양의 실을 꿰는 속임수가 주위에 얻을 수니다.동에 적용할 수 있는 데이터베이스의 업데이트,웹 요청,아무것도 invloving 대량의 디스크 i/o 및니다.

에도 불구하고 이 모든 것,내가 선지자의 운명.참조를 여기에 적절한 이상을 달성하는 데 도움이 무엇을 원하는지 알고 있어야 하는 이유 중 하나는 스레딩하는 것은 복잡하게 보이기 때문에 그것이 될 수 있습니다:)

제어하려는 경우보다 BackgroundWorker/Threadpool 하지만 원하지 않는 모든 것을 스스로 할 수 있는 적어도 두 개의 매우 좋은 공짜로 스레딩 라이브러리 두드리는 장소(Wintellect&PowerThreading)

환호

Simon

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top