Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,027

HOME > .NET Framework > Forum > ทำไมใช้ Application.DoEvents() แล้วเวลาของ Timer ยังหยุดเดินอยู่ครับ



 

ทำไมใช้ Application.DoEvents() แล้วเวลาของ Timer ยังหยุดเดินอยู่ครับ

 



Topic : 124820



โพสกระทู้ ( 14 )
บทความ ( 0 )



สถานะออฟไลน์




Code (VB.NET)
Imports System
Imports System.Threading
Imports System.IO.Ports
Imports System.ComponentModel
Imports VB = Microsoft.VisualBasic


Public Class Form1
    '>>>>>>>>>>>>>Library of Time <<<<<<<<<<<<<
    Private Declare Function GetKeyPress Lib "user32" Alias "GetAsyncKeyState" (ByVal key As Integer) As Integer
    '>>>>>>>>>>>>>ประกาศตัว ค้นหา port <<<<<<<<<<<<<
    Dim myPort As Array
    Delegate Sub SetTextCallBack(ByVal [text] As String)

    '>>>>>>>>>>>>>library Wait <<<<<<<<<<<<<
    Public Sub wait(ByVal seconds As Single)
        Static start As Single
        start = VB.Timer()
        Do While VB.Timer() < start + seconds
            System.Windows.Forms.Application.DoEvents()
        Loop
    End Sub
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        void_Timer()
    End Sub


    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        ' myPort = IO.Ports.SerialPort.GetPortNames()
        ' portComboBox.Items.AddRange(myPort)
        ' txt_BaudRate.Text = SerialPort1.BaudRate
    End Sub
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Reboot.Click

        void_reboot()
        Application.DoEvents()
    End Sub

    '>>>>>>>>>>>>>>> loop reboot <<<<<<<<<<
    '>>>>>>>>>>>>>>> ตอนนี้ถึงหน้า reboot แต่ยังไม่ได้สั่งกด <<<<<<<<<<
    Private Sub void_reboot()

        boxStatus.Items.Clear()
        boxStatus.Items.Add("Please... Wait Rebootting")

        WebBrowser1.Navigate(TextBox3.Text)
        wait(1)
        WebBrowser1.Document.GetElementById("login_login_button").InvokeMember("Click")
        wait(1)
        WebBrowser1.Document.GetElementById("nav_settings_link").InvokeMember("Click")
        wait(1)
        WebBrowser1.Document.GetElementById("settings_utilities_link").InvokeMember("Click")
        wait(1)
        WebBrowser1.Document.GetElementById("settings_utilitiesReboot_button").InvokeMember("Click")
        wait(1)
        WebBrowser1.Document.GetElementById("popup_apply_button").InvokeMember("Click") 'ปุ่มกดตกลง เพื่อ rebootting
        wait(1)

        boxStatus.Text = " Load Program...Complete."

    End Sub

    Private Sub void_shutdow()
        boxStatus.Items.Clear()
        boxStatus.Items.Add("Please... Wait")
        WebBrowser1.Navigate(TextBox3.Text)
        wait(1)
        WebBrowser1.Document.GetElementById("login_login_button").InvokeMember("Click")
        wait(1)
        WebBrowser1.Document.GetElementById("nav_settings_link").InvokeMember("Click")
        wait(1)
        WebBrowser1.Document.GetElementById("settings_utilities_link").InvokeMember("Click")
        wait(1)
        WebBrowser1.Document.GetElementById("settings_utilitiesShutdown_button").InvokeMember("Click")
        wait(1)
        WebBrowser1.Document.GetElementById("popup_apply_button").InvokeMember("Click") 'ปุ่มกดตกลง เพื่อ shutdown 
        'RichTextBox1.Text = " Load Program...Complete."

        boxStatus.Items.Add("Competed")
    End Sub

    Private Sub void_Port1On()
        SerialPort1.PortName = portComboBox.Text
        SerialPort1.Open()
        SerialPort1.Write(1) 'ส่งข้อมูลไปที่ pin 2 of Arduino open
        SerialPort1.Close()
        boxStatus.Items.Add("Drive 2.0 of drive 1 status : ON")
    End Sub
    Private Sub void_Port2On()
        SerialPort1.PortName = portComboBox.Text
        SerialPort1.Open()
        SerialPort1.Write(2) 'ส่งข้อมูลไปที่ pin 3 of Arduino open
        SerialPort1.Close()
        boxStatus.Items.Add("Drive 2.0 of drive 2 status : OFF")
    End Sub
    Private Sub void_Port3On()
        SerialPort1.PortName = portComboBox.Text
        SerialPort1.Open()
        SerialPort1.Write(3) 'ส่งข้อมูลไปที่ pin 4 of Arduino open
        SerialPort1.Close()
        boxStatus.Items.Add("Drive 3.0 of drive 1 status : ON")
    End Sub
    Private Sub void_Port4On()
        SerialPort1.PortName = portComboBox.Text
        SerialPort1.Open()
        SerialPort1.Write(4) 'ส่งข้อมูลไปที่ pin 5 of Arduino open
        SerialPort1.Close()
        boxStatus.Items.Add("Drive 3.0 of drive 2 status : ON")
    End Sub

    Public Sub void_Timer()
        Timer1.Start()
        Label26.Text = Label26.Text + 1
        If Label26.Text = 60 Then
            Label24.Text = Label24.Text + 1
        End If
        If Label26.Text = 60 Then
            Label26.Text = 0
        End If

        If Label24.Text = 60 Then
            Label22.Text = Label22.Text + 1
        End If
        If Label24.Text = 60 Then
            Label24.Text = 0
        End If
        If Label22.Text = 23 Then
            Label22.Text = Label22.Text + 1
        End If
    End Sub
End Class





Tag : .NET, Web (ASP.NET), WebService, VB.NET, VS 2010 (.NET 4.x), Web Service







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2016-10-03 15:21:52 By : Taksaporn View : 3418 Reply : 12
 

 

No. 1



โพสกระทู้ ( 74,058 )
บทความ ( 838 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter Facebook

Quote:
Timer1.Stop()


ลอง debug ดูตรงนี้ครับ






แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2016-10-03 17:34:15 By : mr.win
 


 

No. 2



โพสกระทู้ ( 4,434 )
บทความ ( 23 )



สถานะออฟไลน์
Facebook

Code (VB.NET)
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        void_Timer()
    End Sub

Public Sub void_Timer()
        Timer1.Start() '???????
    End Sub


มีคำสั่งที่ทำให้ Timer1 เริ่มทำงานยังครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2016-10-03 17:59:10 By : lamaka.tor
 

 

No. 3



โพสกระทู้ ( 74,058 )
บทความ ( 838 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter Facebook


แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2016-10-04 12:06:21 By : mr.win
 


 

No. 4



โพสกระทู้ ( 14 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 2 เขียนโดย : lamaka.tor เมื่อวันที่ 2016-10-03 17:59:10
รายละเอียดของการตอบ ::
ย่อโค้ดเหลือแค่นี้แล้วก็ยังค้างคับ
Code (VB.NET)
Imports System
Imports System.Threading
Imports System.IO.Ports
Imports System.ComponentModel
Imports VB = Microsoft.VisualBasic


Public Class Form1
    '>>>>>>>>>>>>>Library of Time <<<<<<<<<<<<<
    Private Declare Function GetKeyPress Lib "user32" Alias "GetAsyncKeyState" (ByVal key As Integer) As Integer
    '>>>>>>>>>>>>>ประกาศตัว ค้นหา port <<<<<<<<<<<<<
    Dim myPort As Array
    Delegate Sub SetTextCallBack(ByVal [text] As String)

    '>>>>>>>>>>>>>library Wait <<<<<<<<<<<<<
    Public Sub wait(ByVal seconds As Single)
        Static start As Single
        start = VB.Timer()
        Do While VB.Timer() < start + seconds
            System.Windows.Forms.Application.DoEvents()
        Loop
    End Sub
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

        Label26.Text = Label26.Text + 1
        If Label26.Text = 60 Then
            Label24.Text = Label24.Text + 1
        End If
        If Label26.Text = 60 Then
            Label26.Text = 0
        End If

        If Label24.Text = 60 Then
            Label22.Text = Label22.Text + 1
        End If
        If Label24.Text = 60 Then
            Label24.Text = 0
        End If
        If Label22.Text = 23 Then
            Label22.Text = Label22.Text + 1
        End If

    End Sub


    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Timer1.Enabled = False
        Label22.Text = 0
        Label24.Text = 0
        Label26.Text = 0
    End Sub
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Reboot.Click

        boxStatus.Items.Clear()
        boxStatus.Items.Add("Please... Wait Rebootting")

        WebBrowser1.Navigate(TextBox3.Text)
        wait(1)
        WebBrowser1.Document.GetElementById("login_login_button").InvokeMember("Click")
        wait(1)
        WebBrowser1.Document.GetElementById("nav_settings_link").InvokeMember("Click")
        wait(1)
        WebBrowser1.Document.GetElementById("settings_utilities_link").InvokeMember("Click")
        wait(1)
        WebBrowser1.Document.GetElementById("settings_utilitiesReboot_button").InvokeMember("Click")
        wait(1)
        'WebBrowser1.Document.GetElementById("popup_apply_button").InvokeMember("Click") 'ปุ่มกดตกลง เพื่อ rebootting

        ' wait(1)
        Timer1.Start() '
        '

        '
        '
        'ให้มันเดินไปเรื่อยๆ จน จะเข้าเงือนไงอื่นแล้วหยุดคับ 
        '
        '
        '

        boxStatus.Text = " Load Program...Complete."

    End Sub
End Class


แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2016-10-04 16:13:31 By : Taksaporn
 


 

No. 5



โพสกระทู้ ( 4,434 )
บทความ ( 23 )



สถานะออฟไลน์
Facebook

ปัญหาน่าจะอยู่ที่

Public Sub wait(ByVal seconds As Single)

รึป่าวครับ

ไม่ลองใช้ thread ดู

https://msdn.microsoft.com/en-us/library/system.threading.thread(v=vs.110).aspx?cs-save-lang=1&cs-lang=vb#code-snippet-1


ประวัติการแก้ไข
2016-10-04 17:58:49
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2016-10-04 17:46:59 By : lamaka.tor
 


 

No. 6



โพสกระทู้ ( 14 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 5 เขียนโดย : lamaka.tor เมื่อวันที่ 2016-10-04 17:46:59
รายละเอียดของการตอบ ::
ถ้าเราใส่ Threading.Thread.Sleep(3000)

ไปแล้ว มันเกิด error ตรงคำสั่งที่เราให้คลิก อัติโนมัติอ่ะคับ


แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2016-10-05 13:10:19 By : Taksaporn
 


 

No. 7



โพสกระทู้ ( 4,434 )
บทความ ( 23 )



สถานะออฟไลน์
Facebook

แล้ว error ว่ายังไงรึ

ปล. Sleep บางครั้งก็ไม่เหมาะกับงานที่ต้องใช้เวลานานๆนะท่าน
ไม่ลองใช้ thread ดู

https://msdn.microsoft.com/en-us/library/system.threading.thread(v=vs.110).aspx?cs-save-lang=1&cs-lang=vb#code-snippet-1
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2016-10-05 14:08:15 By : lamaka.tor
 


 

No. 8



โพสกระทู้ ( 14 )
บทความ ( 0 )



สถานะออฟไลน์


Code (VB.NET)
       WebBrowser1.Navigate(TextBox3.Text)
        Thread.Sleep(1000)
        WebBrowser1.Document.GetElementById("login_login_button").InvokeMember("Click")'มันขึ้นAdditional information: Object reference not set to an instance of an object. ตรงนี้เลยครับเหมือนมันไม่ยอมไป
        Thread.Sleep(1000)
        WebBrowser1.Document.GetElementById("nav_settings_link").InvokeMember("Click")
       Thread.Sleep(1000)
        WebBrowser1.Document.GetElementById("settings_utilities_link").InvokeMember("Click")
        Thread.Sleep(1000)
        WebBrowser1.Document.GetElementById("settings_utilitiesReboot_button").InvokeMember("Click")
        Thread.Sleep(1000)
        'WebBrowser1.Document.GetElementById("popup_apply_button").InvokeMember("Click") 'ปุ่มกดตกลง เพื่อ rebootting


แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2016-10-05 14:40:31 By : Taksaporn
 


 

No. 9

Guest


โปรเจคของคุณ "น่าสนใจ" Arduino โชคไม่ดีมันใช้องค์ความรู้หลากหลายเกินไปสำหรับคุณ
--- สำหรับผมไม่มีปัญหา (จับจู๋ฉี่ยังยากยิ่งกว่า) +55555

ลองอ่านดูครับ "http://stackoverflow.com/questions/15954739/invokememberclick-in-webbrowser-control"

แนะให้อีกนิดหนึ่ง

Code (VB.NET)
    Private Sub void_Port1On()
        SerialPort1.PortName = portComboBox.Text
        SerialPort1.Open()
        SerialPort1.Write(1) 'ส่งข้อมูลไปที่ pin 2 of Arduino open
        SerialPort1.Close()
        boxStatus.Items.Add("Drive 2.0 of drive 1 status : ON")
    End Sub
    Private Sub void_Port2On()
        SerialPort1.PortName = portComboBox.Text
        SerialPort1.Open()
        SerialPort1.Write(2) 'ส่งข้อมูลไปที่ pin 3 of Arduino open
        SerialPort1.Close()
        boxStatus.Items.Add("Drive 2.0 of drive 2 status : OFF")
    End Sub
    Private Sub void_Port3On()
        SerialPort1.PortName = portComboBox.Text
        SerialPort1.Open()
        SerialPort1.Write(3) 'ส่งข้อมูลไปที่ pin 4 of Arduino open
        SerialPort1.Close()
        boxStatus.Items.Add("Drive 3.0 of drive 1 status : ON")
    End Sub
    Private Sub void_Port4On()
        SerialPort1.PortName = portComboBox.Text
        SerialPort1.Open()
        SerialPort1.Write(4) 'ส่งข้อมูลไปที่ pin 5 of Arduino open
        SerialPort1.Close()
        boxStatus.Items.Add("Drive 3.0 of drive 2 status : ON")
    End Sub


มันต้องเขียนแบบนี้
Code (VB.NET)
    Private Sub void_PortXOnOff(ByVal X as Byte, ByVal Y As Byte)
        SerialPort1.PortName = portComboBox.Text
        SerialPort1.Open()
        SerialPort1.Write(X) 'ส่งข้อมูลไปที่ pin X + 1 of Arduino open
        SerialPort1.Close()
        boxStatus.Items.Add(String.Format("Drive {0}.0 of drive {1} status : OFF", X, Y)
    End Sub


แนะให้อีกนิดหนึ่ง การตั้งชื่อตัวแปร/Control ต่างฯ อทิเช่น
Form1
Form2
Form3
...
Label24
Label25
Label26
...
...
...

การตั้งชื่อตัวแปร/Control/etc.. แบบนี้
มันเหมาะสำหรับโปรแกรมมืออาชีพ/ขั้นสูง (ใช้ประโยชน์ได้จริง) แต่สำหรับคุณผมคิดว่ายังไม่เหมาะ (คุณยังมองไม่ออก)
--- สักวันหนึ่งคุณก็จะรู้ด้วยตัวของคุณเองว่า ประโยชน์ของมันมีมหาศาล
--- ยุคใหม่ นิยมตั้งชื่อตัวแปร/Control ให้สั้นที่สุด (ไม่จำเป็นต้องสื่อถึงอะไร) อทิเช่น
---- Dim a As String
---- var string a
---- Dim b As Integer
---- var int b
...
...
...
เป็นต้น หมดยุคตั้งชื่อให้สื่อความหมาย (แต่มีข้อแม้ว่า ต้องรู้จักวิธีใช้ประโยชน์จากมัน)


ปล. ถ้าคุณคุณพอมีความรู้ HTML/JavaScript/Jquery ผมคิดว่า งานของคุณจะง่ายกว่านี้
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2016-10-06 20:52:47 By : หน้าฮี
 


 

No. 10

Guest


จาก #NO 9 แก้ไขนิดหนึ่ง (เดี๋ยวคุณงง)
Code (VB.NET)
'
'Usage: Call PortXOnOff(1, 2, "ON")
'Usage: Call PortXOnOff(1, 2, "OFF")
'
Private Sub void_PortXOnOff(ByVal X as Byte, ByVal Y As Byte, ByVal Z As String)
    SerialPort1.PortName = portComboBox.Text
    SerialPort1.Open()
    SerialPort1.Write(X) 'ส่งข้อมูลไปที่ pin X + 1 of Arduino open
    SerialPort1.Close()
    boxStatus.Items.Add(String.Format("Drive {0}.0 of drive {1} status : {2}", X, Y, Z)
End Sub



ปล. ผมยังไม่ได้พูดถึง Application.DoEvent() และ Theading เลยนะ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2016-10-06 20:56:30 By : หน้าฮี
 


 

No. 11

Guest


จาก #NO9 - #NO10 ในหน้าจอ Login ของผม
ผมมักจะทำแบบนี้ (ไม่ให้ดักจับ ID/Name ของ Control ได้) ดังนี้

Code (VB.NET)
Dim  a As String = Guid.NewGuid().ToString().Replace("-", String.Empty)
Dim b As String = Guid.NewGuid().ToString().Replace("-", String.Empty)
txtUserName.ID = a 'ถ้าเป็น Windows Application ก็ txtUserName.Name
txtPassword.ID = b 'ถ้าเป็น Windows Application ก็ txtPassword.Name


ไม่มีทางที่ JavaScript/Jquery จะจับ ID/Name ได้
ยกเว้นใน Application ของผมเท่านั้น +55555 (แสบสันต์ไหม?)
Code (VB.NET)
WebBrowser1.Document.GetElementById("nav_settings_link").InvokeMember("Click")

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2016-10-06 21:15:37 By : หน้าฮี
 


 

No. 12



โพสกระทู้ ( 14 )
บทความ ( 0 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 9 เขียนโดย : หน้าฮี เมื่อวันที่ 2016-10-06 20:52:47
รายละเอียดของการตอบ ::
ผมกำลังทำงานที่ไม่ได้เรียนมาตรงตามสาขาที่เรียนมา เลย
เข้าใจยากมากกกก 5555 แต่ก็ขอบคุณครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2016-10-07 10:27:37 By : Taksaporn
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : ทำไมใช้ Application.DoEvents() แล้วเวลาของ Timer ยังหยุดเดินอยู่ครับ
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 00
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่