关于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 毫秒触发的事件处理程序。

  • wtf 让 " Private Sub mytimer_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles mytimer.Tick varcookies = varcps varcookies Me.CookiesVal.Text = varcookies End Sub" 工作,即使这是我尝试的第一件事.感谢您和 apt-get 的帮助,我第一次尝试时,计数器仅在我单击按钮时升高,然后您的值会跳跃。


实际上,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。

  • 嗯,当我在创建计时器后插入该代码时,它会在句柄中的 .elapsed 部分下划线,并表示找不到事件已过去。运行时,我得到"无法将类型为 \\'System.EventArgs\\' 的对象转换为类型 \\'System.Timers.ElapsedEventArgs\\'。"错误
  • 您使用的是 System.Timers.Timer 还是 System.Windows.Forms.Timer?我的回答涵盖了 System.Timers.Timer; System.Windows.Forms.Timer调用它的事件Tick(所以写Handles myTimer.Ticke As EventArgs)但是原理应该是一样的。
  • 是的,我是新手,所以我使用了拖放计时器控件。现在我的问题是在 cookie 达到某个值之前制作商店标签 "?????"。我在执行此操作时遇到问题,显然谷歌的解决方案是断点,仅在 c 中可用 .-。我试图让它递归地读取 If 或 While 语句,但每当我将它添加到计时器循环时,它都会中断应用程序
  • 我认为您不应该将其添加到计时器循环中。我会将 varcookies 设为一个属性,以便您可以检查它是否大于某个值,并在更改 varcookies 时更改商店标签的文本,而不是每秒更改一次。这里有更多关于属性的内容。