![]() ![]() ![]() ![]() |
|||||
|
|||||
樓主 愛地球 ![]()
![]() |
簡略說明如下,執行外部程式完成後...Timer1無法再自動啟動... Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Timer1.Enabled = True End Sub Private Sub InitializeTimer() Timer1.Interval = 1000 Timer1.Enabled = True End Sub Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick Label1.Text = Now Timer1.Enabled = False ....執行外部程式 Sql = " INSERT INTO 程式紀錄檔 (紀錄日期) " Sql = Sql & " VALUES ('1070114')" ....執行外部程式完成後 Timer1.Enabled = True Timer1無法自動執行... Label1無法顯示時間 困擾愚弟好多天...快禿頭了...哈哈 希望各位武林高手指點愚弟一下 感激不盡.... |
1樓 |
剛剛簡單測試了一下,
照理說應該是可以正常執行, 可能要看你完整的程式碼才會知道。
本篇文章回覆於2018-01-14 15:35
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
2樓
作者回應
愛地球 ![]() |
感謝樓上大大熱心幫忙...
程式碼如下 Imports System.Data.OleDb Public Class Form1 Dim sql As String Dim sqlconn As New OleDbConnection Dim ds As DataSet Dim mycom As OleDbCommand Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Timer1.Enabled = True End Sub Private Sub InitializeTimer() Timer1.Interval = 1000 Timer1.Enabled = True End Sub Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick Try Label1.Text = Now 外部程式() Catch ex As Exception End Try End Sub Sub 外部程式() Timer1.Enabled = False Label1.Text = "複製中..." My.Computer.FileSystem.CopyDirectory("C:\Intel", "d:\backup", True) sqlconn.ConnectionString() = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\資料庫.mdb;Persist Security Info=False;Jet OLEDB:Database Password=XXX" sqlconn.Open() sql = " INSERT INTO 程式紀錄檔 (紀錄日期) " sql = sql & " VALUES ('備份資料成功')" mycom = New OleDbCommand(sql, sqlconn) mycom.ExecuteNonQuery() sqlconn.Close() Timer1.Enabled = True End Sub End Class 執行外部程式後,Label1.Text無法變回時間 Label1.Text = Now 麻煩大家囉...謝謝!
本篇文章回覆於2018-01-14 16:41
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
3樓 |
根據我的臆測
你的外部程式其實一直在執行,但外部程式持續啟動Timer1,所以整個執行程序一直未能從Timer1跳出,類似再跑無限迴圈。而Label1.Text必須等到Timer1執行完畢後才會更新,所以你一直等不到Label1.Text顯示Now。 建議 1.在Label1.Text=Now後方加 Label1.UpDate 不一定有效。 2.外部程序改成工作執行緒
本篇文章回覆於2018-01-14 17:28
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
4樓 |
另外想到一種
在Label1.Text=Now後方加 Application.DoEvents() 但不見得有效。 自己試試看
本篇文章回覆於2018-01-14 17:31
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
5樓 |
My.Computer.FileSystem.CopyDirectory("C:\Intel", "d:\backup", True) <--- 這件事一秒做得完 ?
本篇文章回覆於2018-01-14 18:06
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
6樓 |
喔,對,我有一個疑問,你寫了
但卻沒有看到你呼叫這個 InitializeTimer ,那這樣,預設的 Interval 應該是 60 秒
本篇文章回覆於2018-01-14 18:12
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
7樓
作者回應
愛地球 ![]() |
感謝3F大大回應...
1.Label1.UpDate無效 2.外部程序改成工作執行緒...不會使用...是否可實際指導 感謝4F大大回應... 1.Application.DoEvents()無效 感謝5F大大回應... 1.My.Computer.FileSystem.CopyDirectory("C:\Intel", "d:\backup", True) 這件事一秒做得完 ?<--- 因不知如何寫...哈哈 感謝6F大大回應... 我是參考如下資料 https://msdn.microsoft.com/zh-tw/library/3tszykws(v=vs.110).aspx 希望各位大大...再幫忙解答...謝謝囉!
本篇文章回覆於2018-01-14 18:33
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
8樓 |
#5F
根據我的想法 作者在執行外部程式時,已經關閉Timer1,理論上Timer1應該不會再計時了,所以不管外部程式執行再久,應該與Timer1無關了吧。 #6F 我使用vb2008在Form拉一個Timer時,他的預設=100,而您說他預設60秒,為何呢? #7F 這是我的測試程式 test模擬外部程式 但是TextBox1都可以寫出次數和時間,即使沒有加上Update也可以。 你的外部程式有無單獨測試過,有無問題。 請你把外部程式的Timer1.Enabled=True拿掉,也就是只跑一次,如果跑不出結果,就是你的外部程式有問題。
本篇文章回覆於2018-01-14 19:55
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
9樓
不錯的參考
誰是誰 ![]() |
To 8F:
你對,我記到了 Web.UI.Timer 的 Interval。 To 樓主: 我發現一個奇怪的地方, Try Label1.Text = Now 外部程式() Catch ex As Exception End Try End Sub 你在 Catch 後把 Exception 吞掉, 要是真的發生甚麼錯誤,你也不知道啥事。 Catch ex As Exception '' 在這邊加上 Debug.WriteLine(ex.ToString()) 之類的,確認是不是有 exception 發生 End Try
本篇文章回覆於2018-01-14 21:12
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
10樓
不錯的參考
小魚 ![]() |
To 8樓:
我有試過在Timer1_Tick中關掉, 做別的事 再把Timer打開, 還是會繼續跑Timer的, 當然間隔時間就會跟原本的不一樣, 等於是從頭開始算。
本篇文章回覆於2018-01-15 00:06
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
11樓 |
樓主該不會是在寫【資料夾 定時同步程式】...
本篇文章回覆於2018-01-15 11:27
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
12樓
作者回應
愛地球 ![]() |
#3F 臆測類似再跑無限迴圈...真聰明
我實際對Timer如何"運用自如"...還不太了解... 之後想想不要放在副程式...就可以了...感謝囉... #11F 寫【資料夾 定時同步程式】...打對了...謝謝 Imports System.Data.OleDb Public Class Form1 Dim sql As String Dim sqlconn As New OleDbConnection Dim ds As DataSet Dim mycom As OleDbCommand Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Timer1.Enabled = True End Sub Private Sub InitializeTimer() Timer1.Interval = 1000 Timer1.Enabled = True End Sub Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick Try Label1.Text = Now Timer1.Enabled = False Label1.Text = "複製中..." My.Computer.FileSystem.CopyDirectory("C:\Intel", "d:\backup", True) sqlconn.ConnectionString() = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\資料庫.mdb;Persist Security Info=False;Jet OLEDB:Database Password=XXX" sqlconn.Open() sql = " INSERT INTO 程式紀錄檔 (紀錄日期) " sql = sql & " VALUES ('備份資料成功')" mycom = New OleDbCommand(sql, sqlconn) mycom.ExecuteNonQuery() sqlconn.Close() Timer1.Enabled = True Catch ex As Exception End Try End Sub End Class 萬分感謝大家這幾天的幫忙...
本篇文章回覆於2018-01-15 21:44
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
13樓 |
你依然是把 exception 在沒有任何處理下吞掉了, 這是一個不好的習慣
本篇文章回覆於2018-01-16 14:01
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
14樓
作者回應
愛地球 ![]() |
感謝大家囉...愚弟會改進...謝謝
本篇文章回覆於2018-01-16 17:12
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
15樓
最有價值解答
風燭殘年 ![]() ![]() |
資料夾定時同步程式
My.Computer.FileSystem.CopyDirectory("C:\Intel", "d:\backup", True) 不就每次都要重新覆製那些已存在的相同檔案 可以試試使用 FileSystemWatcher 來對資料夾進行處理喔.
本篇文章回覆於2018-02-23 10:05
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
回覆 |
如要回應,請先登入. |