Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么While循环在C#XAML中不起作用?_C#_Xaml_While Loop - Fatal编程技术网

为什么While循环在C#XAML中不起作用?

为什么While循环在C#XAML中不起作用?,c#,xaml,while-loop,C#,Xaml,While Loop,我正在尝试为我正在制作的游戏制作键绑定/热键 问题:移动工作一次,然后结束代码 我试着做一个永久的while循环,这样它就永远不会离开代码, 在我添加了while循环之后,它甚至没有注册被按下的键! 我知道while循环存在问题,因为我将其放入注释中,代码的工作方式与之类似 在我在while循环中编码之前。 (我也在使用XAML。) (playerBody是画布) 代码: 使用系统; 名称空间GameWPF { /// ///MainWindow.xaml的交互逻辑 /// 公共部分类主窗口

我正在尝试为我正在制作的游戏制作键绑定/热键

问题:移动工作一次,然后结束代码

我试着做一个永久的while循环,这样它就永远不会离开代码, 在我添加了while循环之后,它甚至没有注册被按下的键! 我知道while循环存在问题,因为我将其放入注释中,代码的工作方式与之类似 在我在while循环中编码之前。 (我也在使用XAML。) (playerBody是画布)

代码:

使用系统;
名称空间GameWPF
{
/// 
///MainWindow.xaml的交互逻辑
/// 
公共部分类主窗口:窗口
{
公共主窗口()
{
初始化组件();
}
私有无效窗口\u KeyDown(对象发送方,KeyEventArgs e)
{
厚度速度=新厚度(0,0,0,100);
bool d=假;
while(d==false)
{
如果(e.Key==Key.W)
{
播放器主体。边距=速度;
}
}
}
}
}

正如一些人已经指出的,没完没了的循环不是一个好主意

我也不认为您的代码只执行一次。事实上,只要按下一个键,它就应该在那里反复运行。但是,始终指定相同的偏移量(
厚度
)。因此,该值始终保持在100,因为它没有相加

厚度速度=新厚度(0,0,0,100);
// ...
播放器主体。边距=速度;
试着这样做:

int速度=100;
// ...
PlayerBody.Margin=新厚度(0,0,0,PlayerBody.Margin.Bottom+速度);

您从未将
d
设置为true-您希望它如何结束?循环从未结束->UI线程被阻止->无法执行UI操作->应用程序被“卡住”
using System;

namespace GameWPF
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {

            InitializeComponent();
        }
        private void Window_KeyDown(object sender, KeyEventArgs e)
        {
           Thickness speed = new Thickness(0, 0, 0, 100);
            bool d = false;
            while (d == false)
            {
                if (e.Key == Key.W)
                {
                    PlayerBody.Margin = speed;
                }
            }
        }
    }
}