为啥我的 .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?