正确使用Task.Delay来延迟按键的时间
下面的代码适用于我正在做的事情,但是如果我对task.delay()()的使用,我很好奇.我需要延迟以确保GameHandler有足够的时间处理我的钥匙按下.但是,我想知道是否有更好的方法来做这样的事情. async public Task CloseMenusAsync(CancellationToken token) { while (GameHandler.Menu.IsOpen && !token.IsCancellationRequested) { if (GameHandler.Menu.IsOpen && GameHandler.Menu.DialogText.Question == "Open") { GameHandler.SendKeyP
138 2024-04-26
编程技术问答社区
在异步调用c#中包裹一个同步函数
我有一台服务器,必须通过网络进行轮询设备,以获取信息,对其进行处理,然后将其发送给用户. 设备调查成为同步阻止功能. 我的问题是: 如何创建自己的异步函数版本以使用任务或其他异步模式执行此功能? 考虑以下代码以获取设备的信息: IEnumerable GetDataFromEquipment(string ipAddress) { Equipment equipment = new Equipment(); //Open communication with equipment. Blocking code. int handler = equipment.OpenCommunication(ipAddress); //get data from equipment. Blocking code. IEnumerabl
14 2024-04-26
编程技术问答社区
同步调用异步方法出错
我正在在桌面应用程序中编写代码,该应用程序将在警车中使用新的Windows Geolocation API.我为Geolocator.PositionChanged活动写了一个活动的侦听器,但没有被打电话.在我阅读文档时,看来Gelocator仅在职位变化时提出此事件. 我认为我的程序完成设置事件后应该做的第一件事是调用Geolocator.GetPositionAsync方法以获取当前位置,然后让位置随着它们的发生而更新. 我需要同步调用Geolocator.GetPositionAsync方法.为此,我写了以下方法: private async Task GetCurrentPosition() { await Geolocator.GetGeopositionAsync(); } 但是,我在其中有以下编译器错误,其中await在其中: '等待'要求类型的'windows.foundation.iasyncoperatio
4 2024-04-26
编程技术问答社区
什么是更好的方法来删除有条件的文件
我想在C#上构建Win Service(no UI),所有它所做的就是:在当时X KB上的目录列表和删除文件列表上运行. 我想要更好的表现, 这样做的更好方法是什么? 删除文件没有纯异步函数,所以如果我想使用异步,请等待 我可以像: 一样包装此功能 public static class FileExtensions { public static Task DeleteAsync(this FileInfo fi) { return Task.Factory.StartNew(() => fi.Delete() ); } } 并将此功能称为: FileInfo fi = new FileInfo(fileName); await fi.DeleteAsync(); 我认为像 一样运行 foreach file on ListOfDirectories { if(file.Length>1000) await file
12 2024-04-26
编程技术问答社区
在C#中把同步代码转换为异步代码
我试图将我的方法制作成一种可以异步称为的东西. 通常来自Addqueue方法,我只会在工作类中调用listofjobsinqueue方法,获取结果并完成. 使用我可以在此处找到有关异步编程的信息,我已经完成了以下代码,但是它似乎陷入了 currentpagecode 属性调用. 它甚至都不到 MessageBox.Show("使用" + queueresult.Count.Count.Count.Count +" lows"); line. 有人可以协助我向我展示我出错的地方吗? //Primary Class public void AddQueue() { MessageBox.Show(GetJobsFromQueueAsync().Result.Count().ToString()); } async Task> GetJobsFromQueueAsync()
0 2024-04-26
编程技术问答社区
如何异步递增定时器?
我试图通过单击按钮在按钮上异步更新计时器. 说示例我设置了时间= 60秒 ,几分钟后我运行程序时,计时器已达到45秒,当我单击按钮时,它应该在时间添加j = 15秒,并且计时器应不同步为60秒.请帮助 private int time = 60; DateTime dt = new DateTime(); private j = 15 ; private DispatcherTimer timer; public MainWindow() { InitializeComponent(); timer = new DispatcherTimer(); timer.Interval = new TimeSpan(0, 0, 1); timer.Tick += timer_tick; timer.Start(); } vo
8 2024-04-26
编程技术问答社区
在没有async/await的情况下等待异步HTTP请求的响应
我正在为Windows Forms应用程序开发一个插件,该应用程序在地图上(在WebBrowser Control中)上外交终端位置.案件如下: 用户单击按钮(调用插件); 创建了异步HTTP请求(确定终端的坐标); 作为所有收到答复 - 该地图应向用户外交. 我写了代码: foreach (var terminal in terminals) { var webRequest = (HttpWebRequest)WebRequest.Create(GeoCoder.GeoCodeUrl + terminal.Address); var taskResp = Task.Factory.FromAsync(webRequest.BeginGetResponse, webRequest.EndGetResponse,
2 2024-04-26
编程技术问答社区
C#函数执行时的异步等待
我具有一个阻止功能,该功能执行异步MySQL查询并在获得结果时返回结果.原因是异步是该程序在查询期间不允许锁定. 当用户按下按钮时调用该函数,因此在第一个查询完成之前,该功能可能会被调用几次.我以为我可以添加布尔值来检查查询是否正在执行,并让功能等待直到继续完成后,但它无法按预期工作.我使用的两个doevents()有一些问题.如果您发表评论,则运行良好,除了UI冻结. 在查询正在执行时,如何使函数进行非阻滞等待,以及在获取查询本身时,非障碍物是否会等待?我真的更喜欢将其保存在一个线程上,因为该功能本身正在阻止称为它的代码.任何帮助都会非常感谢! public Exception LastError; public MySqlConnection Conn; public MySqlDataReader Reader; public bool IsExecuting = false; public MySqlDataReader
12 2024-04-26
编程技术问答社区
在c#应用程序内的任务之间共享集合
我有一个WPF应用程序,我必须在其中填写一些集合: private async Task FillList() { await Task.Factory.StartNew(() => { gdpList = SimpleIoc.Default.GetInstance>().GetAll().ToList(); MedecinGDP.AddRange(SimpleIoc.Default.GetInstance>().GetAll()); CodeGDP_Collection.AddRange(gdpList); FiltredParticipant.Ad
14 2024-04-26
编程技术问答社区
流程结束前未完成的任务
在主线程中的代码中,我称为第三方API.对于API的每个结果,我称之为2个异步任务.有时所有工作都可以完美,有时并非所有异步任务都运行.我想,当主线程完成时,垃圾收集器杀死了我在后台运行的所有其他任务.有什么办法告诉垃圾收集者在主线程完成时不要杀死背景服务? 代码是这样的: for (int i = 0; i { DoSomething1(guid); }); } pu
2 2024-04-26
编程技术问答社区
如何等待async void完成?
我需要等待我的async void完成.它中有一些await Task.Delay函数,我需要它们在继续之前完成.这个空隙没有返回任何东西,因此我看不出这样做async Task的理由,我还将这个空隙中的数组散发出来,我声明了一些变量.那我该怎么做呢? async Task是唯一的方法吗?我的空白不期望任何参数/输入. 解决方案 返回 Task (不 Task )而不是void.请注意,Task的非生成形式不需要包装值.它仅用于发信号完成或错误,而不是结果.在async方法的情况下,这等同于同步void返回类型.这意味着您可以等待您的方法完成. 其他解决方案 每个异步函数都应返回任务,而不是void and task >而不是tresult.唯一的例外是事件处理程序. 因此,如果您的异步功能不是事件处理程序,则应返回任务.完成此操作后,您可以等待它... ... ehm,前提 如果您具有同步函数,并且想调用异步函数,请使用以下内容: va
10 2024-04-26
编程技术问答社区
Task.Factory.StartNew对性能有什么副作用吗?
我通过启动一个新线程来登录: 在ASP.NET Web API 2应用中捕获和记录异常 void MainMethod(){ try{ // stuff... } catch (Exception ex) { Logger.Log(ex); } } class Logger { void Log(Exception ex) { Task.Factory.StartNew(() => LogAsync(ex)); } void LogAsync(Exception ex) { // doing some reflection stuff to retrieve code-place // saving the log... } } 问题是:在一个真正的高流量应用程序中,这种方法是否具有任何副作用?在主要上下文中登录更好吗? P.S.这个问题与
4 2024-04-26
编程技术问答社区
混合使用async-await和fire-and-forget方法
我正在使用.NET的HttpListener类编写WebSocket服务器. 本质上,我有一个HandleListener()函数,它等待客户端连接并将每个客户端接种到HandleClient(WebSocket client).所以我目前有: private async void HandleListener() { try { while (listener != null && listener.IsListening) { HttpListenerContext listenerContext = await listener.GetContextAsync(); WebSocketContext webSocketContext = await listenerContext.AcceptWebSocketA
0 2024-04-26
编程技术问答社区
从调用线程异步执行方法中的多个进程
假设我有多个(例如,两个)过程,我想依次运行但异步运行,我该如何执行此操作?请参阅下面的摘要: public virtual Task ExecuteAsync() { var tcs = new TaskCompletionSource(); string exe1 = Spec.GetExecutablePath1(); string exe2 = Spec.GetExecutablePath2(); string args1 = string.Format("--input1={0} --input2={1}", Input1, Input2); string args2 = string.Format("--input1={0} --input2={1}", Input1, Input2); try { var process1 = new Process {
10 2024-04-26
编程技术问答社区
我应该在我的IMDB API库中为开发者提供同步或异步方法吗?
我将制作一个DLL库,该库将搜索和访问IMDB电影页面. 我应该如何处理GUI中的冷冻,我应该使用异步方法,还是应该允许开发人员手动创建用于使用DLL的线程? 解决方案 这完全取决于您. 话虽如此,我认为提供异步和同步的API将使您的图书馆更像框架库,这将为您的用户提供正确使用它的最佳机会. 例如,webclient提供 downloadfile and 其他解决方案 这是您最终的判断.但是,请考虑: 如果您仅以同步方式暴露,则用户可以始终使用BackgroundWorker避免阻塞. 如果您觉得可以在操作期间提供一些中介数据(例如进度百分比),那么异步版本可能很有用. 其他解决方案 我会避免在这样的库中避免异步调用. 图书馆的用户不在乎阻止该怎么办?如果是应该 block的命令行脚本? 应用程序的线程是一个重大的设计决定,避免为其做出. 我将首先实现封锁,同步调用,也许以后,添加异步方法,以使库更易于使用线程较刺眼的程序
8 2024-04-26
编程技术问答社区
带有进度条的多个异步下载
我正在尝试从我的Web服务器下载文件夹,我想在Progress Bar上显示进度,并下载了多少个数据/总计要下载.首先,我尝试使用WebClient.DownloadFile.它完美无缺,但没有触发DownloadProgressChangedEventHandler.我想它仅通过下载而激活.因此,我已经将方法重新处理为WebClient.DownloadFileAsync.这是复杂的地方. 例如,我的Web服务器上有30个文件,尺寸为53 MB.我想下载所有30个文件,并在Progress Bar上显示下载的进度(并在其显示标签下显示XX/53 MB下载). //Inicialized by opening dialog private void DownloadForm_Shown(object sender, EventArgs e) { WebClient client = new WebClient(); client.DownloadProgressC
8 2024-04-26
编程技术问答社区
为什么我不能再向监听套接字发送?
我正在为C#中的在线游戏编写一个简单的代理(更多数据包记录器). 基本登录过程是这样的: client->服务器:登录数据包 - 我的代理接收数据包,显示并将其发送到服务器. 服务器 - >客户端:连接!数据包 - 我的代理再次收到数据包,它也再次显示它,但是当试图将其发送给客户时,它说: "由于未连接插座,并且(使用sendto呼叫在数据报套接字上发送时,请求发送或接收数据的请求),没有提供地址." 我的代码: http://lesderid.pastebin.com/nkey.com/nkey.nkey.7qqp 解决方案 171: listenSocket.Send(RecvBuffer2); 您不应该尝试发送此听力插座.您需要发送使用Endaccept()创建的套接字. (您的代码中的winsock2-但是您需要以不同的方式范围.) 其他解决方案 侦听TCP插座具有一个功能 - 接受客户端连接.该连接将占据a 新套接字描述符,即为每个新客户
8 2024-04-26
编程技术问答社区
在异步方法中获取剪贴板文本
我有问题通过异步方法获取剪贴板文本.因为它总是返回一个空值(而不是空的).这是对问题的简单证明: private async void button_Click(object sender, EventArgs e) { string result = await Task.Run(() => { System.Threading.Thread.Sleep(3000); return Clipboard.GetText(); //returns empty! (but clipboard is not empty) }); MessageBox.Show(result); } 我确定剪贴​​板不是空的.解决方案是什么? 解决方案 它不起作用,因为剪贴板仅在COM threading model (apartmen
8 2024-04-26
编程技术问答社区
异常从未到达异步方法的处理程序(C#)。
我有一个简单的结构,我很难理解为什么它起作用(或不起作用)我认为应该如何工作. 基本上,有两种方法 private async void DoStuff() { try { AuthenticationStuff(); }catch(UnauthorizedAccessException){ UI.Display("AMAGAD!"); } } private async void AuthenticationStuff() { var user = GetUser(); if(user == null) throw new UnauthorizedAccessException(); DoMoreAuthenticationStuff(); } 现在问题是例外永远不会达到DoStuff()方法的处理程序.我的第一个本能是"嘿,这是一种异步方法,我必须等待它",但是我不能这样做,因为显然异
8 2024-04-26
编程技术问答社区
如何在Task.Run中调用Async方法?
我需要以异步方式发送邮件.我已经想出要使用剃须刀生成器从剃须刀视图生成HTML模板.现在,我需要使用smtpclient.sendmailasync作为邮件发送HTML.但是我发现Razor Generator花费了很多时间,因此我不想将模板生成部分包括在我的发送邮件方法中,因为发送邮件方法不应担心获得HTML模板. 我有示例代码: public static void SendEmailAsync(TModel model, string templatePath, string subj, string toEmail, string cc = null, string bcc = null) { string templateFilePath = HostingEnvironment.MapPath(templatePath); // Generate the email body from the templa
8 2024-04-26
编程技术问答社区