Помогни ни да направим Uroci.net по - богат! Добави урок

Свободна последователност на нишките - Free Threading

bubust   трудност:    видян: 4660

За първи път, VB.NET дава възможността на VB разработчиците да пишат наистина апликации със свободна последователност на нишките (free threaded - следят нишката).Ако вашата апликация трябва да обработи големи масиви от данни и това става бавно, вие можете да оставите тази обработка свободно да се следи от програмата (own thread - своя нишка), а останалата част от програмата да още достъпна. Във VB6, най-доброто в такива случаи е да се използва метод DoEvents.

Изпробвайте следния код, написан за VB.NET. за бутон - button4. Подпрограмата се нарича BeBusy, има цикъл само за заемане на време.

Докато трае този цикъл (loop), вие консумирате нишката (thread) за тази апликация, и UI няма да отговори докато върви цикъла.

Внимание

Цикълът трае около десетина секунди, но ако ви се видят цяла вечност можете да кликнете в VB.NET IDE и да изберете Stop Debugging от меню Debug.

Private Sub button4_Click(ByVal sender As System.Object, _

ByVal e As System.EventArgs) Handles button4.Click

BeBusy()

End Sub

Sub BeBusy()

Dim i As Decimal

For i = 1 To 10000000

`не се прави нищо

Next

Beep()

End Sub

За да създадете thread, трябва да използвате класа System. Threading. Thread. При създаването на този клас, вие подавате името на процедурата или искания метод на този thread. Префасонирайте името на процедурата или метода с оператор AddressOf. Нещо такова:

Dim busyThread As New System.Threading.Thread(AddressOf BeBusy)

Следващото, което трябва да направите е да извикате метод Start на този нов thread. Викането във BeBusy ( VB.NET), на своя собствен thread ще изглежда така:

Private Sub button4_Click(ByVal sender As System.Object, _

ByVal e As System.EventArgs) Handles button4.Click

Dim busyThread As New System.Threading.Thread(AddressOf BeBusy)

busyThread.Start()

End Sub

Не се изискват промени в процедура BeBusy. Ако стартирате този код, интерфейса ще остане активен докато върви BeBusy. Кога е приключила процедура BeBusy ще разберете от Beep.

VB.NET поддържа свойство IsAlive за всеки thread, така че може да проверите кога върви.



- Примери за наследяемост:

Пример 1 Сведения за служители (учители и администрация) в едно училище



Фигура62Съобщителните прозорци
Option Strict On

Imports System

Namespace slujashti

Public Class Slujasht

Private m_sFirstName As String = ""

Private m_sLastName As String = ""

Private m_bKvalifikacia As Boolean = False

Private m_iSlujNumber As Integer = 0

Private Shared iTotslujashti As Integer = 0

Sub New()

MyBase.New()

iTotslujashti += 1

m_iSlujNumber = iTotslujashti

End Sub

Sub New(ByVal fName As String, ByVal lName As String)

MyBase.New()

m_sFirstName = fName

m_sLastName = lName

iTotslujashti += 1

m_iSlujNumber = iTotslujashti

End Sub

Overridable Function Serialize() As Boolean

If ((m_sFirstName <> "") And (m_sLastName <> "")) _

Then

Return True

Else

Return False

End If

End Function



#Region "Slujasht Properties"

Public ReadOnly Property SlujashtNumber() As Integer

Get

Return m_iSlujNumber

End Get

End Property



Property FirstName() As String

Get

FirstName = m_sFirstName

End Get

Set(ByVal Value As String)

m_sFirstName = Value

End Set

End Property



Property LastName() As String

Get

LastName = m_sLastName

End Get

Set(ByVal Value As String)

m_sLastName = Value

End Set

End Property




Property Kvalifikacia() As Boolean

Get

Kvalifikacia = m_bKvalifikacia

End Get

Set(ByVal Value As Boolean)

m_bKvalifikacia = Value

End Set


End Property

#End Region

End Class

End Namespace

Imports System

Imports Slujasht.slujashti.Slujasht

Imports Microsoft.VisualBasic.ControlChars

Imports System.Windows.Forms



Namespace ShkolaDivision

`Отделенията (Divisions) са две - Администрация и Учители

Public Class Division

Inherits slujashti.Slujasht


Private m_sDivision As String = ""

Private m_iMonthsInDivision As Integer = 0


Sub New()

MyBase.New()

End Sub


Sub New(ByVal fName As String, ByVal lName As String)

MyBase.new((fName), (lName))

End Sub


Overrides Function Serialize() As Boolean

If ((m_sDivision <> "") And _

(m_iMonthsInDivision <> 0)) Then


If MyBase.Serialize = True Then

Return True

Else

Return False

End If

Else

Return False

End If

End Function


#Region "Division Properties"

Property Division() As String

Get

Division = m_sDivision

End Get

Set(ByVal Value As String)

m_sDivision = Value

End Set

End Property


Property MonthsInDivision() As Integer

Get

MonthsInDivision = m_iMonthsInDivision

End Get

Set(ByVal Value As Integer)

m_iMonthsInDivision = Value

End Set

End Property


#End Region


End Class

End Namespace



Public Module modmain

'"Main" е началната точка на апликацията

Sub Main()

Dim newSluj1 As New ShkolaDivision.Division

Dim newSluj2 As New _

ShkolaDivision.Division("Mariya", "Hristova")


With newSluj1

.FirstName = "Jancho"

.LastName = "Kudev"

.Division = "Uchiteli"

.MonthsInDivision = 18

End With


showSlujasht(newSluj1)


newSluj2.Division = "Administration"

newSluj2.MonthsInDivision = 7


If TypeOf newSluj2 Is _

ShkolaDivision.Division Then


If newSluj2.Serialize = True Then

showSlujasht(newSluj2)

End If

End If


End Sub


'--Тази частна подпрограма ще поеме отделението - Division

'- class и ще разпечата съдържанието. Отбележете, че

'- сигнатурата показва, че подпрограмата приема

'- ShkolaDivision.Division тип данни за параметър


Private Sub showSlujasht(ByRef currentSlujasht As _

ShkolaDivision.Division)

Dim sDisplayString As String


sDisplayString = "Slujasht Name: " & _

currentSlujasht.FirstName & _

" " & currentSlujasht.LastName & CrLf

sDisplayString += "Slujasht Division: " & _

currentSlujasht.Division & CrLf

sDisplayString += "Slujasht Months: " & _

currentSlujasht.MonthsInDivision & CrLf

sDisplayString += "Slujasht Number: " & _

currentSlujasht.SlujashtNumber & CrLf


MessageBox.Show(sDisplayString, "Slujasht Scanner", _

MessageBoxButtons.OK, MessageBoxIcon.Information)

End Sub


End Module


Страници: 1 2 »

Регистрирайте се, за да добавите коментар


Калдейта ЕООД - © 2003-2010. Всички права запазени.
Препоръчваме: Национален Бизнес | Bomba.bg | IT Новини | Диплома.бг | TRAVEL туризъм | Реферати | AmAm.bg | Иде.ли | Курсови работи | Фото Форум | Spodeli.net | Фото-Култ | Atol.bg | Elmaz.com | MobileBulgaria.com | Казанлък.Com