草庐IT

c# - 等待系统删除文件

我在删除文件后刷新文件列表时遇到问题。当我发出删除文件的命令时,异常被抛出,因为刷新方法试图访问一个应该被删除的文件。经过一番思考和调试,我得出的结论是,问题在于系统需要一些时间来删除文件。我这样解决://DeletingfileSystem.Threading.Thread.Sleep(2000);//Refreshinglist而且效果很好。我的问题是有没有更优雅的方法来等待系统删除文件然后继续代码...? 最佳答案 这对我有用:publicstaticvoidDeleteFile(StringfileToDelete){var

c# - 任务链(等待上一个任务完成)

vartasks=newList();foreach(varguidinguids){vartask=newTask(...);tasks.Add(task);}foreach(vartaskintasks){task.Start();Task.WaitAll(task);}这是UI线程的运行。我需要一个接一个地执行任务变量中的所有任务。问题是如果我调用Task.WaitAll(task),UI会卡住。如何在不卡住UI的情况下执行以下逻辑? 最佳答案 这不是任务链。您需要使用ContinueWith进行任务链接。最后一个任务需要更新

c# - 我应该在每个等待的操作上调用 ConfigureAwait(false)

我读了这篇文章https://blog.stephencleary.com/2012/07/dont-block-on-async-code.html-但是我看到了一个矛盾:我知道UI线程死锁的问题,因为UI线程阻塞等待异步操作完成,但相同的异步操作同步到UI线程上下文-因此异步操作无法进入UI线程,因此UI线程不会停止等待。文章告诉我们解决方法是不要在UI线程上阻塞,否则您需要使用ConfigureAwait(false)everywhere:Youwouldhavetouseforeveryawaitinthetransitiveclosureofallmethodscalledb

c# - 单击按钮期间是否可以等待异步任务?

我的应用程序中有一个刷新按钮,它使用一些异步方法来更新显示的项目列表。问题是我不能为按钮单击的事件处理程序返回Task类型,所以我只剩下一个asyncvoid方法。因此,用户可以点击刷新按钮,然后在重新填充列表时选择一个项目,这将导致错误。处理按钮点击的代码开始:privateasyncvoidButton_Click_1(objectsender,RoutedEventArgse){awaitViewModel.CreateMessageCommand();那么有什么方法可以正确地等待这个任务完成吗? 最佳答案 由于控件的事件处理

c# - MVC 4 Controller 中的异步和等待

每次我尝试使用新的Async和Await运算符并从数据库返回对象集合时,我都会得到一个InvalidOperation异常(exception)。当我用它只返回一个项目时,它工作正常。Controller代码:publicasyncTaskEnvironmentList(){EfEnvironmentDataAccessdataAccess=newEfEnvironmentDataAccess();ICollectionenvironments=awaitdataAccess.GetAllEnvironmentsAsync();returnPartialView(environment

c# - 我想等待抛出 AggregateException,而不仅仅是第一个异常

在等待错误任务(设置了异常的任务)时,await将重新抛出存储的异常。如果存储的异常是AggregateException,它将重新抛出第一个并丢弃其余的。我们如何使用await,同时抛出原始的AggregateException,这样我们才不会不小心丢失错误信息?请注意,当然可以为此考虑hacky解决方案(例如,围绕awaittry-catch,然后调用Task.Wait)。我真的很想找到一个干净的解决方案。此处的最佳做法是什么?我想过使用自定义等待程序,但内置的TaskAwaiter包含许多我不确定如何完全重现的魔法。它调用TPL类型的内部API。我也不想重现所有这些。如果您想使用

c# - 哪些方法可以让线程等待一个事件然后继续执行?

我有一个正在运行的线程,它委派了一些任务。当单个任务完成时,将引发一个事件,说明它已完成。这些任务需要按照特定的顺序运行,并且需要等待上一个任务完成。我怎样才能让线程等到它收到“任务完成”事件?(除了设置标志然后while循环轮询标志的明显事件处理程序之外) 最佳答案 我经常使用AutoResetEvent当我需要等待异步任务完成时等待句柄:publicvoidPerformAsyncTasks(){SomeClasssomeObj=newSomeClass()AutoResetEventwaitHandle=newAutoRese

c# - 异步等待 Task.Run 与 HttpClient.GetAsync

我是c#5异步功能的新手。我试图了解这两种实现之间的区别:实现1:privatevoidStart(){foreach(varurlinurls){ParseHtml(url);}}privateasyncvoidParseHtml(stringurl){varquery=BuildQuery(url);//BuildQueryissomehelpermethodvarhtml=awaitDownloadHtml(query);//...MyTypeparsedItem=ParseHtml(html);SaveTypeToDB(parsedItem);}privateasyncTask

c# - 在 backgroundworker 运行时显示等待光标

在我的Windows应用程序启动期间,我必须调用Web服务来检索一些默认数据以加载到我的应用程序中。在加载表单期间,我运行一个后台程序来检索这些数据。我想显示等待光标,直到检索到此数据。我该怎么做?我试过在调用后台工作程序运行之前设置等待光标。当我报告进度为100时,我将其设置回默认光标。等待光标出现,但当我移动鼠标时它消失了。环境:Windows7专业版64位VS2010C#.NET4.0Windows窗体编辑:我按照JayRiggs建议的方式设置光标。它仅在我不移动鼠标时有效。**更新:我创建了一个按钮点击,它执行以下操作:当我点击按钮并移动鼠标时,无论我是否移动鼠标,都会出现等待

c# - System.Windows.MessageBox 在开始之前不会等待用户输入!

...而且这是没有道理的。T-T在我的Application_Startup事件处理程序中,我的代码看起来有点像这样:privatevoidApplication_Startup(objectsender,StartupEventArgse){stringerrorMessage;if(CheckStartUpConditions(outerrorMessage)){(newMainWindow()).Show();}else{MessageBox.Show(errorMessage,"ApplicationStartup",MessageBoxButton.OK,MessageBox