为啥我的 .UWP 模拟器无法在 Visual Studio 中启动?

Posted

技术标签:

【中文标题】为啥我的 .UWP 模拟器无法在 Visual Studio 中启动?【英文标题】:Why wont my .UWP emulator launch in Visual Studio?为什么我的 .UWP 模拟器无法在 Visual Studio 中启动? 【发布时间】:2021-02-25 01:31:40 【问题描述】:

我正在创建一个相当简单的应用程序来了解 Xamarin 和 SkiaSharp 等的基础知识。基本上,只是一个球在背景中移动,但是当我尝试运行我的代码以查看模拟器中发生的情况时,它卡住了加载,当我跳回 Vis 时。 Studio 模拟器崩溃。

我的代码是这样的:

using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;
using SkiaSharp;
using SkiaSharp.Views.Forms;
using System.Runtime.InteropServices.ComTypes;
using System.Runtime.CompilerServices;

namespace Ball_Bounce

   public partial class MainPage : ContentPage
   
       int posX = 0;
       int posY = 0;
       int dx = 5;
       int dy = 5;
       int ballD = 100;
       bool running = true;
     

                       

       SKPaint blackFillPaint = new SKPaint
       
           Style = SKPaintStyle.Fill,
           Color = SKColors.Black
       ;

       SKPaint Ball = new SKPaint
       
           Color = SKColors.Black,

       ;
       public MainPage()
       
           InitializeComponent();

           Device.StartTimer(TimeSpan.FromSeconds(1f / 60), () =>
              
                  CanvasView.InvalidateSurface();
                  return true;
              );
           
       

       private void CanvasView_PaintSurface(object sender, SKPaintSurfaceEventArgs e)
       
           SKSurface surface = e.Surface;
           SKCanvas canvas = surface.Canvas;
           canvas.Clear(SKColors.SteelBlue);
           int width = e.Info.Width;
           int height = e.Info.Height;
           canvas.Translate(width / 2, height / 2);

           do
           
               posX += dx;
               posY += dy;
            while (running == true);

           canvas.DrawCircle(posX, posY, ballD, blackFillPaint);
           


       
   

在我添加声明变量的部分之前:

        int posY = 0;
        int dx = 5;
        int dy = 5;
        int ballD = 100;
        bool running = true;

然后是这个:

            do
            
                posX += dx;
                posY += dy;
             while (running == true);

它会启动并显示漂亮的石板蓝色背景和黑色球(我在启动时没有声明在哪里绘制球的变量,而是使用整数。)但是当我试图让球穿过屏幕时,它根本不会启动。任何帮助将不胜感激。

【问题讨论】:

你的do..while 循环永远不会退出,它只会一直旋转,耗尽你的系统资源,直到操作系统杀死它 @Jason - 好的,这是有道理的,经过更多研究后,我发现了 Xamarin 中的翻译功能,但我不太明白如何使用它。使用该功能会做我想做的事吗? (在屏幕上移动球) 不知道。您正在做的事情可能没问题,但您只需要在每次计时器触发时为 一帧 设置动画。不需要循环。 @Jason - 我删除了循环,它工作了 :) 谢谢! @JonTheBrownDog 嗨,如果你解决了这个问题,你可以分享解决方案作为答案,然后其他有同样问题的人就会知道。 【参考方案1】:

您的 do..while 循环永远不会退出,它只会一直旋转,耗尽您的系统资源,直到操作系统将其杀死……您只需在每次计时器触发时为一帧设置动画。不需要循环。 @杰森

删除循环意味着模拟器可以渲染图像并自行刷新代码,就像它自己围绕代码构建的循环一样。

【讨论】:

以上是关于为啥我的 .UWP 模拟器无法在 Visual Studio 中启动?的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Visual Studio 中为 UWP 应用设置“用户通知侦听器”功能

为啥我无法从我的 Xamarin.Forms UWP 应用程序访问 DownloadsFolder,并获得 System.UnauthorizedAccessException?

无法在 Visual Studio 2017 中更改程序集的默认语言

为啥我的发行版 .exe 在启动 UWP 应用程序时失败?

我的vs2015为啥没有uwp应用的模板,sdk都下载了

为啥 Visual Studio 无法解析我的 CSS 类名称?