Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Public Class Form1
- ' 表示欲尋找質數的範圍
- Const FinfNumberRange As Integer = 100000
- ' 這是一個用來找在 FinfNumberRange 的數值範圍內最大的質數的程式
- Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
- ' 建立尋找執行緒
- Button1.Text = "Start"
- ' 顯示目前找到的最大質數
- Label1.Text = "Max is : "
- ' 設定 ProgressBar1
- ProgressBar1.Maximum = FinfNumberRange
- ProgressBar1.Minimum = 0
- ProgressBar1.Value = 0
- ' Label2 表示目前 ProgressBar1 所跑到的質
- Label2.Text = String.Empty
- End Sub
- ' 建立一條執行緒
- Private thread As Threading.Thread
- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
- ' 若是按下 Start
- If String.Equals(Button1.Text, "Start") Then
- ' 改變 Button 文字為 Stop
- Button1.Text = "Stop"
- ' 設定執行緒
- thread = New Threading.Thread(AddressOf CheckNumber)
- ' 啟用執行緒
- thread.Start()
- Else ' 若為按下 Stop
- Button1.Text = "Start"
- ' 強制結束執行緒
- Try
- thread.Abort()
- Catch ex1 As Threading.ThreadAbortException
- Catch ex2 As NullReferenceException : End Try
- End If
- '' 這是用來測試
- '' 如果這樣的功能直接執行和使用執行緒差異在哪裡
- 'For i As Integer = 2 To FinfNumberRange Step 1
- ' For j As Integer = 2 To i Step 1
- ' If i Mod j = 0 Then
- ' Label1.Text = "Max is : " & i
- ' End If
- ' Next
- ' ProgressBar1.Value += 1
- 'Next
- End Sub
- ''' <summary>
- ''' 檢查由 2 到 FinfNumberRange 內的數值是否為質數
- ''' </summary>
- ''' <remarks></remarks>
- Private Sub CheckNumber()
- For i As Integer = 2 To FinfNumberRange Step 1
- Select Case ReturnPrimeNumber(i)
- Case True ' 若為質數
- IsPrimeNumberSub(i)
- Case False ' 若不為質數
- IsNotPrimeNumberSub()
- End Select
- Next
- End Sub
- ''' <summary>
- ''' 會檢測傳入的數值是否為質數,並以 Boolean 數值回傳結果
- ''' </summary>
- ''' <param name="value">欲檢測的數值</param>
- ''' <returns>True 表示為質數,False 表示為非質數</returns>
- ''' <remarks></remarks>
- Private Function ReturnPrimeNumber(ByVal value As Integer) As Boolean
- For i As Integer = 2 To value - 1 Step 1
- If (value Mod i = 0) Then
- Return False
- End If
- Next : Return True
- End Function
- ''' <summary>
- ''' 當檢測的數值為質數時
- ''' </summary>
- ''' <param name="value">為質數的數值</param>
- ''' <remarks>因為有對 UI 做操作所以要實作委派</remarks>
- Private Delegate Sub IsPrimeNumberCallBack(ByVal value As Integer)
- Private Sub IsPrimeNumberSub(ByVal value As Integer)
- If Me.InvokeRequired Then
- Dim ipncb As New IsPrimeNumberCallBack(AddressOf IsPrimeNumberSub)
- Me.Invoke(ipncb, value)
- Else
- Label1.Text = "Max is : " & value
- ProgressBar1.Value += 1
- Label2.Text = ProgressBar1.Value
- End If
- End Sub
- ''' <summary>
- ''' 當檢測的數值非質數時
- ''' </summary>
- ''' <remarks>因為有對 UI 做操作所以要實作委派</remarks>
- Private Delegate Sub IsNotPrimeNumberCallBack()
- Private Sub IsNotPrimeNumberSub()
- If Me.InvokeRequired Then
- Dim inpncb As New IsNotPrimeNumberCallBack(AddressOf IsNotPrimeNumberSub)
- Me.Invoke(inpncb)
- Else
- ProgressBar1.Value += 1
- Label2.Text = ProgressBar1.Value
- End If
- End Sub
- End Class
Advertisement
Add Comment
Please, Sign In to add comment