Form collection

posted on 12 Aug 2010 07:38 by inet03 in VB-Coder
Public NotInheritable Class MyCSharp
    Private Shared FormCollection As List(Of Object) = New List(Of Object)
    Public Shared Sub Initiliaze()
        Dim Ex As Type, TypeForm = GetType(Form)
        For Each Item In GetType(MyCSharp).Assembly.GetExportedTypes
            Ex = Item.BaseType
            Do Until Ex Is Nothing
                If Ex Is TypeForm Then Exit Do
                Ex = Ex.BaseType
            If Ex Is Nothing Then Continue For
            FormCollection.Add(Activator.CreateInstance(Item, New Object() {}))
    End Sub

    Public Shared Function GetForm(Of T As Form)() As T
        For Each Item In FormCollection
            If TypeOf Item Is T Then Return DirectCast(Item, T)
        Return Nothing
    End Function

End Class

BackgroundWorker vs background Thread

posted on 13 Jul 2010 17:03 by inet03 in VB-Coder
  • Use BackgroundWorker if you have a single task that runs in the background and needs to interact with the UI. The task of marshalling data and method calls to the UI thread are handled automatically through its event-based model. Avoid BackgroundWorker if...
    • your assembly does not already reference the System.Windows.Form assembly,
    • you need the thread to be a foreground thread, or
    • you need to manipulate the thread priority.
  • Use a ThreadPool thread when efficiency is desired. The ThreadPool helps avoid the overhead associated with creating, starting, and stopping threads. Avoid using the ThreadPool if...
    • the task runs for the lifetime of your application,
    • you need the thread to be a foreground thread,
    • you need to manipulate the thread priority, or
    • you need the thread to have a fixed identity (aborting, suspending, discovering).
  • Use the Thread class for long-running tasks and when you require features offered by a formal threading model, e.g., choosing between foreground and background threads, tweaking the thread priority, fine-grained control over thread execution, etc.
    Thread faster then BgW but speed is unstable (Thread range [220 to 40] BgW [107 - 55] ).

    (เจอถามบ่อยๆเริ่มขี้เกียจพิมพ์ = =") 


    ข้อ1 รับจำนวนเต็ม1จำนวน แล้วตรวจสอบค่าดังนี้
             ถ้ามากกว่า 0 ให้แสดงค่าว่า "Positive Value"
             ถ้าน้อยกว่า 0 ให้แสดงค่าว่า "Negative Value"
             ถ้าเท่ากับ 0 ให้แสดงค่าว่า "Equal Zero"

        Function CheckNumber$(ByVal Input%)
            Select Case Input
                Case Is > 0
                    CheckNumber = "Positive Value"
                Case Is < 0
                    CheckNumber = "Negative Value"
                Case Else
                    CheckNumber = "Equal Zero"
            End Select
        End Function


    ข้อ2 รับค่าจำนวนเต็ม 1จำนวนแล้วตรวจสอบว่าเป็นเลขคู่หรือเลขคี่
             ถ้าเป็นเลขคู่ ให้แสดงค่าว่า "Even Number"
             ถ้าเป็นเลขคี่ ให้แสดงค่าว่า "Odd Number"

        Function IsOddNumber$(ByVal Input%)
            Return If(Input Mod 2 = 0, "Even Number", "Odd Number")
        End Function


    ข้อ3 รับตัวอักษร 1ตัวทางแป้นพิมพ์ แล้วตรวจสอบว่าเป็นสระในภาษาอังกฤษหรือไม่
             ถ้าเป็นสระ ให้แสดงคำว่า "Yes"
             ถ้าไม่เป็นสระ ให้แสดงคำว่า "No"

        Function IsEngChar$(ByVal Input As Char)
            Dim Ex = New Integer() {AscW(Input), AscW("A"), AscW("z")}

            Return If(AscW(Input) < AscW("A") OrElse AscW(Input) > AscW("z"), "No", "Yes")
        End Function


    ข้อ4 จงเขียนโปรแกรมตัดเกรด โดยเกณฑ์ ดังนี้
            80-100 คะแนน ได้เกรด "A"                60-64 คะแนน ได้เกรด"C"
            75-79 คะแนน ได้เกรด "B+"                55-59 คะแนน ได้เกรด"D+"
            70-74 คะแนน ได้เกรด"B"                   50-54 คะแนน ได้เกรด"D"
            65-69 คะแนน ได้เกรด"C+"                 0-49 คะแนน ได้เกรด"E"
            ถ้าคะแนนไม่อยู่ในช่วงที่กำหนด ให้แสดงคำว่า"ERROR"

        Function Grade$(ByVal Input%)
            If Input >= 80 Then Return "A"
            If Input < 50 Then Return "E"

            Dim Core = New String() {"B+", "B", "C+", "C", "D+", "D"}
            For i = 0 To Core.Length
                If Input < 80 - 5 * i AndAlso Input > 74 - 5 * i _
                Then Return Core(i)

            Return "ERROR"
        End Function


    ข้อ5 จงเขียนโปรแกรมโดยให้รับจำนวนหน่วยของน้ำประปา แล้วทำการคำนวณเงินที่ต้องชำระ ซึ่งมีอัตราต่อหน่วยดังนี้
             1-10 หน่วย คิดหน่วยละ 10.00บาท
             11-20 หน่วย คิดหน่วยละ 9.50บาท
             21-50 หน่วย คิดหน่วยละ 9.00บาท
             51-100 หน่วย คิดหน่วยละ 8.50บาท
            101-1000 หน่วย คิดหน่วยละ  8.00บาท
      ตั้งแต่ 1001 หน่วยขึ้นไป คิดหน่วยละ 7.00บาท
    พร้อมทั้งให้จำแนกประเภทผู้ใช้น้ำประปาว่าจัดอยู่ในประเภทใด ซึ่งมีการจำแนกประเภทดังนี้
       1-100หน่วย            จัดว่าเป็น ที่อยู่อาศัย
       101-1000 หน่วย จัดว่าเป็น ราชการ หรือ ธุรกิจขนาดเล็ก
       1001-ขึ้นไป หน่วย   จัดว่าเป็น อุตสาหกรรม หรือ ธุรกิจขนาดใหญ่

        Function WaterCost$(ByVal Input%)
            Dim Cost# = 0
            Dim Rate = New Integer() {10, 20, 50, 100, 1000}

            For Lim = 0 To Rate.Length
                For i = 1 + If(Lim > 0, Rate(Lim - 1), 0) _
                To If(Input < Rate(Lim), Input, Rate(Lim))
                    Cost += 10 - 0.5 * Lim
                If Input < Rate(Lim) Then Exit For

            If Input > 1000 Then
                For i = 1001 To Input
                    Cost += 7
            End If

            Dim Type = ""
            Select Case Input
                Case Is < 101
                    Type = "ที่อยู่อาศัย"
                Case 101 To 1000
                    Type = "ธุรกิจขนาดเล็ก"
                Case Is > 1000
                    Type = "ธุรกิจขนาดใหญ่"
            End Select

            Return String.Format("ประเภทผู้ใช้น้ำประปา:{1} จำนวนเงินที่ต้องชำระ :{0:0.00}", Cost, Type)

        End Function


    ข้อ 6 จงเขียนโปรแกรมคิดค่าเดินทาง โดยให้รับค่าระยะทาง 1จำนวน แล้วทำการคิดค่าเดินทาง ดังนี้
        1-5 กิโลเมตร คิดเป็นเงิน   1000บาท
        6-10 กิโลเมตร คิดเพิ่มกิโลเมตรละ 50 บาท จาก 5กิโลเมตรแรก
             ตั้งแต่ 11 กิโลเมตรขึ้นไป คิดเพิ่มกิโลเมตรละ 40 บาท จาก 10กิโลเมตรแรก

        Function BusCost%(ByVal Input%)
            BusCost = 1000
            If Input < 6 Then Exit Function

            For i = 6 To If(Input < 11, Input, 10)
                BusCost += 50

            If Input < 11 Then Exit Function
            For i = 11 To Input
                BusCost += 40
        End Function

    Richter View my profile