所有循环崩溃winforms vb.net?

Posted

技术标签:

【中文标题】所有循环崩溃winforms vb.net?【英文标题】:ALL loops crashing winforms vb.net? 【发布时间】:2020-06-20 04:41:38 【问题描述】:

我正在尝试制作一个小型 Winforms 游戏,似乎我的 while 循环(如下所示)正在阻止我前进。

 While (battlevalue = False)

            如果 (Player1Health 

当我的任何角色移动时,我的 .exe 文件崩溃,Visual Studio 调试器在这种情况下毫无用处,因为它没有检测到任何“问题”,而且似乎我不能没有 while 循环,因为如果我没有时间,玩家的攻击只会减去一次敌人的生命值。所以我尝试了一个直到循环。也没有运气。事实上,我所做的每一个循环都会使我的应用程序崩溃。我不能使用 if 语句,因为它们不是真正的循环,如果我根本不使用循环,我也会遇到同样的问题。

请提供您可能有的任何解决方案。

VB.NET 核心 4.7.2

Visual Studio 16.6.0 版

【问题讨论】:

您确实意识到那些End 语句在没有任何清理的情况下结束了当前进程,对吧? End 就像在任务管理器中右键单击一个进程并选择结束任务。你真的是想在那里使用Exit While 而不是End 无论如何,我猜你根本不应该有一个循环。用这么少的信息很难确定,但 WinForms 是事件驱动的,所以几乎可以肯定每次引发特定事件时都应该做某事,而不是在引发一次事件时重复。 【参考方案1】:

确实,正如 jmc 所评论的那样;你应该删除那些End 声明——它们肯定不是你想要做的。我假设您也希望停止处理此代码,因此您可能不想执行 (Glave.Location.Y = SwAxe.Location.Y) 位。避免这种情况的一种简单方法是使其成为 If Else 链的一部分

        If (Player1Health <= 0) Then
            MessageBox.Show("Player Two Won!")
            'End
        ElseIf (Player2Health <= 0) Then
            MessageBox.Show("Player One Won!")
            'End
        Else If (Glave.Location.Y = SwAxe.Location.Y) Then
            If (e.KeyCode = Keys.Q) Then
                Player2Health = (Player2Health - Player1Attack)
                MessageBox.Show(Player2Health)
            End If
        End If
    End While

【讨论】:

也许他还需要returnExit While 才能联系到If (Glave.Location.Y = SwAxe.Location.Y) Then....。以防万一。

以上是关于所有循环崩溃winforms vb.net?的主要内容,如果未能解决你的问题,请参考以下文章

VB.NET WinForm获取运行程序用户名

将 VB.NET 2.0 Winform 迁移到 3.5 WPF

VB.Net:循环所有表单项,包括 CommonDialogs

VB.NET Winform的一些功能实现

VB.NET(WinForms)中带参数的安全线程池队列

VB.NET如何在winform中“刷新”数据DbContext