1

これを最初に WinForm プロジェクトで行いました。アプリケーションの種類を「コンソール アプリケーション」に変更しました。form1.vb を削除し、スタートアップ オブジェクトをこの「Module1.vb」に変更しましたが、実行できません。アプリ。アプリは実行されますが、タイマーの目盛りは何もしていません。コードはまったく同じです。サブの main/form1_load名を 1 つだけ変更しました。

私が間違っていることは何ですか?

PS: エラーがロック メソッドの条件にあったかどうかをテストしましたが、問題はありません。問題はティッカー イベントにありますが、その理由はわかりません。

#Region " Vars "

    Dim Running As Boolean = False
    Dim Errors As Boolean = False

    Dim Executable_Name As String = Nothing

    Dim Toogle_Key As System.Windows.Forms.Keys = Nothing
    Dim WithEvents Toogle_Key_Global As Shortcut = Nothing

    Dim Executable_Timer As New Timer
    Dim Lock_Timer As New Timer
    Dim Lock_Interval As Int32 = 10
    Dim Lock_Sleep As Int32 = Get_Milliseconds(3)

    Dim Screen_Center_X As Int16 = (Screen.PrimaryScreen.Bounds.Width / 2)
    Dim Screen_Center_Y As Int16 = (Screen.PrimaryScreen.Bounds.Height / 2)

#End Region

    ' Load
Sub main()
    Pass_Args()
    Sleep()
    Lock()
End Sub

    ' Lock
Private Sub Lock()
    If Process_Is_Running(Executable_Name) Then
        AddHandler Lock_Timer.Tick, AddressOf Lock_Tick
        AddHandler Executable_Timer.Tick, AddressOf Executable_Tick
        Lock_Timer.Interval = Lock_Interval
        Lock_Timer.Start()
        Executable_Timer.Start()
        Running = True
    Else
        Terminate()
    End If
End Sub

' Lock Tick
Private Sub Lock_Tick()
    Console.WriteLine("test")
    If Running Then Cursor.Position = New Point(Screen_Center_X, Screen_Center_Y)
End Sub

アップデート

MSDN の例のようにこれらの変更を加えました。

Dim Executable_Timer As New System.Timers.Timer
Dim Lock_Timer As New System.Timers.Timer

AddHandler Lock_Timer.Elapsed, AddressOf Lock_Tick
AddHandler Executable_Timer.Elapsed, AddressOf Executable_Tick

しかし、ティック/経過はまだ何もしていません...

4

2 に答える 2

1

の最後にWindows.Forms.Timer追加すると、コンソール アプリケーションで使用できます。Application.Run()main()

Windows.Formsこの種のタイマーは、オフスクリーンオブジェクトを使用している場合 (つまり、オフスクリーン レンダリングの場合)、一部のコンソール アプリケーションで役立つ場合があります。これらのオブジェクトはSystem.Timer、別のスレッド (Windows.Formsオブジェクトが作成されたスレッドとは別のスレッド) で起動されるため、単純にアクセスすることはできません。 )。

System.Timers.Timerそれ以外の場合は、必ずまたはを使用してくださいSystem.Threading.Timer

于 2013-12-31T14:08:32.627 に答える