Tag: 等待

没有冻结替代Thread.Sleep等待在任务内部

我必须调用一个如下工作的Web API: 上传一首歌 请求对该歌曲进行特定分析 等待该过程完成 检索并返回结果 我遇到了问题。 3,我尝试过Thread.Sleep但冻结了UI。 如何在不冻结UI的情况下等待任务? public override async Task Execute(Progress progress, string id) { FileResponse upload = await Queries.FileUpload(id, FileName, progress); upload.ThrowIfUnsucessful(); FileResponse analyze = await Queries.AnalyzeTempo(id, upload); analyze.ThrowIfUnsucessful(); FileResponse status; do { status = await Queries.FileStatus(id, analyze); status.ThrowIfUnsucessful(); Thread.Sleep(TimeSpan.FromSeconds(10)); } while (status.File.Status != “ready”); AnalyzeTempoResponse response = await Queries.FileDownload(id, status); […]

等到多个命令行进程完成?

我需要执行许多命令行脚本。 它们目前存储在List 。 我想同时运行它们,并且只有在所有这些步骤完成后才继续执行下一步。 我已经尝试了下面显示的方法,但发现它缺乏,因为最后一个命令不一定最后结束 。 事实上,我发现最后一个命令甚至可以是第一个完成的命令。 所以,我相信我需要像WaitForExit()这样的东西,但是在所有正在执行的进程完成之前它不会返回。 for (int i = 0; i < commands.Count; i++) { string strCmdText = commands[i]; var process = System.Diagnostics.Process.Start("CMD.exe", strCmdText); if (i == (commands.Count – 1)) { process.WaitForExit(); } } //next course of action once all the above is done

C#:如何暂停线程并在某些事件发生时继续?

如何暂停线程并在某些事件发生时继续? 我希望当按钮单击时线程继续。 有人告诉说thread.suspend不是暂停线程的正确方法。 那另一个解决方案

等待内部方法直到捕获事件

我在C#中遇到了这个问题。 我做了一个方法,从一个名为Phone.GetLampMode();的DLL调用一个函数Phone.GetLampMode(); 现在Phone.GetLampMode不会返回任何内容。 在’ onGetLampModeResponse ‘事件中返回数据。 有没有办法可以在我的方法中等待,直到我从onGetLampModeResponse事件中获取数据? public bool checkLamp(int iLamp) { Phone.ButtonIDConstants btn = new Phone.ButtonIDConstants(); btn = Phone.ButtonIDConstants.BUTTON_1; btn += iLamp; Phone.GetLampMode(btn, null); return true; } private void Phone_OnGetLampModeResponse(object sender, Phone.GetLampModeResponseArgs e) { var test = e.getLampModeList[0].getLampMode.ToString(); }

等待n秒,然后下一行代码没有冻结forms

嗨我想找到一个等待几毫秒的方法,然后再转到下一行代码, 我已经研究过Thread.Sleep,但这会冻结主窗体,我希望它保持活跃状态​​。 我尝试了定时器和秒表,当他们勾选时应该发布到控制台时冻结主表单。 我找不到在我想要的等待中使用task.delay或后台工作者的方法。 伪代码: Wait 2 – 6 seconds Log “waiting” Log “waiting” Log “waiting” Stop Waiting – Run next line of code. 我尝试过的方法只是冻结表单并在之后填充日志,我只想要一个简单的等待方法而不冻结表单而不必处理被调用的事件,这意味着下一行不会运行。 任何帮助都会很棒,因为我还是c#的新手并且它让我有点生气:(

暂停执行方法而不锁定GUI。 C#

我正在使用C#进行卡片游戏,参与我的OOP介绍文章并让游戏正常运行,但我正在为GUI添加“天赋”。 目前,卡片即时处理并显示在UI上。 我希望在交易卡之前暂停程序暂停一会儿。 当游戏启动时,以下代码运行以填充代表它们的PictureBox(最终将是一个循环): cardImage1.Image = playDeck.deal().show(); cardImage2.Image = playDeck.deal().show(); cardImage3.Image = playDeck.deal().show(); cardImage4.Image = playDeck.deal().show(); cardImage5.Image = playDeck.deal().show(); … 我尝试使用System.Threading.Thread.Sleep(100); 在每个deal()。show()之间以及每个方法中,但它实现的只是锁定我的GUI,直到所有的睡眠处理完毕,然后一次显示所有的卡片。 我也试过使用计时器和while循环的组合,但它产生了相同的效果。 达到预期结果的最佳方法是什么?

如何在提供WPF Dispatcher事件时等待WaitHandle?

有人给我发了电子邮件,询问我是否有WaitOneAndPump于WPF的WaitOneAndPump版本。 目标是在同一堆栈帧上等待句柄(类似于WaitHandle.WaitOne )并在等待时泵送WPF Dispatcher事件。 我真的不认为这样的API应该在任何生产代码中使用,无论是对于WinForms还是WPF (可能除了UI自动化之外)。 WPF没有公开WinForms的DoEvents的显式版本,这是一个非常好的设计决策,考虑到DoEvents API一直滥用的公平份额 。 然而,这个问题本身很有意思,所以我将把它作为一个练习,并发布任何我想出的答案。 如果有兴趣,请随意发布您自己的版本。

如何异步等待x秒然后执行某些操作?

我知道在C#和Windows Forms中有Thread.Sleep和System.Windows.Forms.Timer和Monitor.Wait 。 我似乎无法弄清楚如何等待X秒然后做其他事情 – 没有锁定线程。 我有一个带按钮的表格。 在按钮上单击计时器应启动并等待5秒钟。 在这5秒钟后,表格上的其他一些控件显示为绿色。 当使用Thread.Sleep ,整个应用程序将在5秒内无响应 – 所以我如何“在5秒后执行某些操作”?

Selenium WebDriver – 如何使用C#设置页面加载超时

我正在使用Selenium 2.20 WebDriver使用C#创建和管理firefox浏览器。 要访问页面,我使用以下代码,在访问URL之前设置驱动程序超时: driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(5)); // Set implicit wait timeouts to 5 secs driver.Manage().Timeouts().SetScriptTimeout(new TimeSpan(0, 0, 0, 5)); // Set script timeouts to 5 secs driver.Navigate().GoToUrl(myUrl); // Goto page url 问题是,有时页面需要永远加载,并且看起来使用selenium WebDriver加载页面的默认超时是30秒,这太长了。 我不相信我设置的超时适用于使用GoToUrl()方法加载页面。 所以我试图找出如何设置加载页面的超时,但是,我找不到任何实际工作的属性或方法。 当我单击一个元素时,默认的30秒超时似乎也适用。 有没有办法将页面加载超时设置为特定值,以便当我调用GoToUrl()方法时,它只会等待我指定的时间才能继续?

c#等待一段时间而不阻塞

我希望我的方法等待大约500毫秒,然后检查是否有一些标志已经改变。 如何在不阻止我的其他应用程序的情况下完成此操作?