none
請教一個 System.timers.timer 的問題 RRS feed

  • 問題

  • 跟各位前輩請教一個  SystemTimer的問題

    在 FormTimer下沒這個問題  但在SystemTimer下出現了   TargetInvocationException 未處理的狀況

     

    發生情況如下

     

            Declare Function B_8132_get_position Lib "8132.dll" Alias "_8132_get_position" (ByVal axis As Integer, ByVal pos As Double) As Integer

    在 Form_load 已經宣告了 SystemTimer

            sysTmr8132.Interval = 300
            sysTmr8132.AutoReset = True
            AddHandler sysTmr8132.Elapsed, AddressOf sysTmr8132_Elapsed
            sysTmr8132.SynchronizingObject = Me
            sysTmr8132.Start()

    再來是 sysTmr8132的啟動

    Private Sub sysTmr8132_Elapsed(ByVal sender As System.Object, ByVal e As System.Timers.ElapsedEventArgs)

            Dim TestBit As Integer
            Dim IOState As Integer
            Dim MotionStatus As Integer
            Dim i As Integer
            Dim curpos As Double = 0
            Dim curpos1 As Double = 0
            B_8132_get_position(0, curpos)
            B_8132_get_position(1, curpos1)

    end sub

     

    但在  B_8132_get_position(0, curpos) 這一行執行就出現  TargetInvocationException 未處理的狀況

     

    請問要怎麼處理才好     已經花一個下午在處理了    頭痛阿

     

    詳細情況再追加

     

    Declare Function B_8132_get_position Lib "8132.dll" Alias "_8132_get_position" (ByVal axis As Integer, ByVal pos As Double) As Integer

     B_8132_get_position(1, curpos)     <====原來是 0  改成 1 就過了  但在VB6時就是設 0 .....

    >_<    請問有甚麼問題嗎??

     

    • 已編輯 Rhinn 2010年6月25日 上午 01:06
    2010年6月24日 上午 09:45

解答

  • sorry 這兩天比較忙,問題找到了,但有點莫名其妙

    作天翻了 說明書

    Declare Function B_8132_get_position Lib "8132.dll" Alias "_8132_get_position" (ByVal axis As Integer, ByVal pos As Double) As Integer

    這行指令式再說  要控制軸卡去找要移動的距離

    我只有 2個軸   axis 應該就是代表 0,1 可以選  ,書裡也沒說由哪開始

    B_8132_get_position(0, curpos)
    B_8132_get_position(1, curpos1)   <----這行會過  上一行不會過

    異想天開  把 Byval axis 改成 Byref axis  過了   /___________\

     

    不知到這樣會如何

     

     

     

    • 已標示為解答 Lolota Lee 2010年6月28日 上午 02:17
    2010年6月26日 下午 02:44

所有回覆

  • B_8132_get_position  <--  這是什麼?
    2010年6月24日 上午 09:54
  • B_8132_get_position  <--  這是什麼?

    抱歉   上面修改一下

    加上這行

        Declare Function B_8132_get_position Lib "8132.dll" Alias "_8132_get_position" (ByVal axis As Integer, ByVal pos As Double) As Integer

    2010年6月24日 上午 10:02
  • 這個Function B_8132_get_position 我猜會處理UI是嗎 ?

    當System.Timers.Timer的Elapsed事件程序內容要變更表單畫面控制項時,需使用委派的方式或透過 SynchronizingObject 屬性封送來處理。

    請參考

    http://www.dotblogs.com.tw/billchung/archive/2009/04/19/8052.aspx


    以下是簽名檔, 請勿沒事對號入座
    MSDN 文件庫很重要
    回應幫助你的人是一種禮貌, 良好的禮貌有助於激發大家對你問題回應的熱情
    進步的人會找尋自己程式中的缺點,半桶水則把自己程式的錯誤推到不相干事物的身上
    2010年6月24日 上午 10:12
    版主
  • 這個Function B_8132_get_position 我猜會處理UI是嗎 ?

    當System.Timers.Timer的Elapsed事件程序內容要變更表單畫面控制項時,需使用委派的方式或透過 SynchronizingObject 屬性封送來處理。

    請參考

    http://www.dotblogs.com.tw/billchung/archive/2009/04/19/8052.aspx


    以下是簽名檔, 請勿沒事對號入座
    MSDN 文件庫很重要
    回應幫助你的人是一種禮貌, 良好的禮貌有助於激發大家對你問題回應的熱情
    進步的人會找尋自己程式中的缺點,半桶水則把自己程式的錯誤推到不相干事物的身上

    感謝提供的這篇,就是因為看了這三篇才決定改用System.Timer

    我已經下了指令

      sysTmr8132.SynchronizingObject = Me

    但一樣有問題,坦白說 UI 還是不太懂,趕覺像是 Form表單上的原件

    只是 發生問題的這行  是操作  PCI介面上的控制卡   應該跟Form表單上的原件無關才對........   >_<

     

    2010年6月25日 上午 12:32
  • 引發TargetInvocationException 後的詳細例外狀況內容是什麼 ? 可否貼上來研究看看 ?

    以下是簽名檔, 請勿沒事對號入座
    MSDN 文件庫很重要
    回應幫助你的人是一種禮貌, 良好的禮貌有助於激發大家對你問題回應的熱情
    進步的人會找尋自己程式中的缺點,半桶水則把自己程式的錯誤推到不相干事物的身上
    2010年6月25日 下午 04:03
    版主
  • sorry 這兩天比較忙,問題找到了,但有點莫名其妙

    作天翻了 說明書

    Declare Function B_8132_get_position Lib "8132.dll" Alias "_8132_get_position" (ByVal axis As Integer, ByVal pos As Double) As Integer

    這行指令式再說  要控制軸卡去找要移動的距離

    我只有 2個軸   axis 應該就是代表 0,1 可以選  ,書裡也沒說由哪開始

    B_8132_get_position(0, curpos)
    B_8132_get_position(1, curpos1)   <----這行會過  上一行不會過

    異想天開  把 Byval axis 改成 Byref axis  過了   /___________\

     

    不知到這樣會如何

     

     

     

    • 已標示為解答 Lolota Lee 2010年6月28日 上午 02:17
    2010年6月26日 下午 02:44
  • Declare Function B_8132_get_position Lib "8132.dll" Alias "_8132_get_position" (ByVal axis As Integer, ByVal pos As Double) As Integer

    這行指令式再說  要控制軸卡去找要移動的距離

    我只有 2個軸   axis 應該就是代表 0,1 可以選  ,書裡也沒說由哪開始

    B_8132_get_position(0, curpos)
    B_8132_get_position(1, curpos1)   <----這行會過  上一行不會過

    異想天開  把 Byval axis 改成 Byref axis  過了   /___________\

     

    不知到這樣會如何

    看起來 _8132_get_position是一個 Win32 API的Function, 這要看原來說明書中怎麼定義這個Win32 API函式的參數.

    以下是簽名檔, 請勿沒事對號入座
    MSDN 文件庫很重要
    回應幫助你的人是一種禮貌, 良好的禮貌有助於激發大家對你問題回應的熱情
    進步的人會找尋自己程式中的缺點,半桶水則把自己程式的錯誤推到不相干事物的身上
    2010年6月26日 下午 06:59
    版主