关于vb.net:Visual Studio Express 2010 – WinForms 应用程序 – 帮助制作system.timers.timer

Visual Studio Express 2010 - WinForms application - Help making system.timers.timer

我之前问过这个问题,但没有得到可靠的答案。

我正在 Visual Studio Express 2010 中制作一个程序来模仿游戏 Cookie Clicker 以获得乐趣。

在 cookie clicker 中,您可以获得每秒自动生成 cookie 的项目。我正在使用一个基本的表单应用程序并且非常新,所以我基本上只知道如何修改事件。

表单计时器与表单上的其他所有内容都在同一线程上运行,因此制作表单计时器将无法工作,因为它不会在后台触发(至少我无法让它启动)

我需要帮助创建一个在单独的线程上运行的计时器,该线程将每秒循环一次,这样我就可以在计时器触发时将每秒 cookie 的值添加到 cookie 的总值中。

我当前的代码是:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Public Class window
Dim varcookies As Integer = 0
Dim varcps As Decimal = 0
Dim varclickercost As Decimal = 10
Dim varclicker As Integer = 0

Private Sub Cookie_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cookie.Click
    varcookies = varcookies + 1
    Me.CookiesVal.Text = varcookies
End Sub

Private Sub window_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Me.CPSVal.Text = varcps
    Me.CookiesVal.Text = varcps
    Me.btnclicker.Text = varclickercost
    Me.clock.Enabled = True
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnclicker.Click
    If varcookies >= varclickercost Then
        varcookies = varcookies - varclickercost
        varcps = varcps + 0.5
        varclicker = varclicker + 1
        varclickercost = varclickercost * 1.5
        Me.Clickers.Text = varclicker
        Me.btnclicker.Text = varclickercost
        Me.CookiesVal.Text = varcookies
        Me.CPSVal.Text = varcps
    End If
End Sub

结束类

我知道代码中没有计时器,但那是因为我不知道它们是如何工作的。

如您所知,我对 VB 非常陌生,因此非常感谢 ELI5 的解释。

提前谢谢:)


您不应该在单独的线程上使用计时器来完成这样一个简单的任务。只需将 Timer 条目从 Toolbox 拖放到您的 Form 中,即可将 Timer 添加到您的主表单中。然后在"属性"窗口中选择它并将其设置为每 1000 毫秒打勾并双击表单底部的计时器以添加每 1000 毫秒触发的事件处理程序。


实际上,System.Timers.Timer 将在后台运行。订阅其 Elapsed 事件:

1
2
3
Private Sub MyTimer_Elapsed(sender As Object, e As ElapsedEventArgs) Handles myTimer.Elapsed
 varcookies = varcookies + varcps
End Sub

只要计时器达到其指定周期(在您的情况下为 1 秒),就会调用此子例程。您无需创建单独的线程,它会自动执行此操作。只需确保将其 Interval 属性设置为 1 秒,并在表单的 Load 中将 Enabled 设置为 true。