【发布时间】:2020-02-03 01:45:25
【问题描述】:
我将我的问题简化为这个例子:
[STAThread]
static void Main() {
var t = Task.Run(async delegate {
await Task.Delay(TimeSpan.FromSeconds(5));
return "delayed action";
});
t.Wait();
Console.WriteLine("Task t Status: {0}, Result: {1}", t.Status, t.Result);
}
虽然这在我的主机 PC 上表现正常,但当在 VMware Workstation Player 15 上运行并安装全新的 Windows 10 时,它会在返回“延迟操作”之前关闭。没有错误。如果我在开头放置另一个 Console.WriteLine,它会显示在 cmd 中。
我分配给 VMware 4 核和 6GB 内存,关闭 cpu 虚拟化,打开 3d 加速。我是否缺少一些依赖项,或者 VM 需要不同的配置?
我的目标是创建一系列需要随时间传播的SendInput 函数。我什至尝试了一个带有延迟选项的第 3 方“点击器”工具,它也有同样的问题。我必须将其设置为 30 毫秒才能获得 500 毫秒的点击次数,就好像大部分点击次数从未注册过一样。对我的代码执行相同操作在 VM 上不起作用,但在主机 PC 上可以正常工作。
【问题讨论】:
-
它是“关闭而不显示”还是“不延迟预期的持续时间”?程序是从终端(保持打开状态)运行还是通过在资源管理器中双击运行? tldr:在末尾添加一个 Console.ReadLine 并显示启动+等待任务所需的时间,并酌情重新评估和澄清问题。
-
我通过单击运行可执行文件,然后首先通过终端导航到它的位置。终端关闭时两次都没有显示任何内容,就好像它认为代码已运行完成一样。编辑:将修改我的代码示例以包含更多控制台日志和时间戳。
-
从命令行终端运行它不会关闭..这将消除一个潜在的混乱来源。
-
我将结束这个问题,因为事实证明问题不在于线程,但程序需要首先获得 6-7 个输入,然后在所有后续输入上形成无论数量多少都可以正常工作,真的很奇怪,不知道为什么会这样。感谢您的阅读和评论。
标签: c# .net vmware vmware-player