c# – 后台工作程序因处理过多而崩溃?

c# – 后台工作程序因处理过多而崩溃?,第1张

概述我一直在与背景工作者挣扎,我开始怀疑用bw做什么是有限制的.我正在尝试利用bw来处理TCPIP交换,同时使用其ProgressChanged方法更新UI.我知道UI更新没问题,但我的DoWork例程(如下所示)有时会导致bw线程消失/停止工作.有没有其他人有这个问题? private void TCPIP_DoWork(object sender, DoWorkEventArgs e){ 我一直在与背景工作者挣扎,我开始怀疑用bw做什么是有限制的.我正在尝试利用bw来处理TCPIP交换,同时使用其ProgressChanged方法更新UI.我知道UI更新没问题,但我的DoWork例程(如下所示)有时会导致bw线程消失/停止工作.有没有其他人有这个问题?

private voID TCPIP_DoWork(object sender,DoWorkEventArgs e){   int a = 0;   s.Send(System.Text.EnCoding.ASCII.GetBytes("s"));   if (worker.CancellationPending == true)   {      s.Send(System.Text.EnCoding.ASCII.GetBytes("t"));   }   else   {      try      {         a = s.Available;         s.Receive(bytes);         Thread.Sleep(25);         using (Stream fileStream = new fileStream(@sbpfile.Text,fileMode.Append,fileAccess.Write,fileShare.None))         {             using (BinaryWriter bw = new BinaryWriter(fileStream))             {                if (a == 0)                   Thread.Sleep(20);                else if (a < 1023)                {                   bw.Write(bytes,a);                   Thread.Sleep(20);                }                else                {                   bw.Write(bytes,1024);                   Thread.Sleep(20);                }             }          }       }       catch(Exception e)       {          Console.Writeline("{0} Exception.",e);       }   }}

注意:这些Thread.Sleep() *** 作的唯一原因是因为它们似乎是bw不会自行跳过的临时修复…

解决方法 尝试检查RunWorkerCompleted事件处理程序上的Error属性.也许你会遇到一些异常,这些异常不会被代码处理.

voID worker_RunWorkerCompleted(object sender,RunWorkerCompletedEventArgs e){   if (e.Error != null)      Console.Writeline("{0} Exception.",e.Error);           // etc}
总结

以上是内存溢出为你收集整理的c# – 后台工作程序因处理过多而崩溃?全部内容,希望文章能够帮你解决c# – 后台工作程序因处理过多而崩溃?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1229321.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-06
下一篇2022-06-06

发表评论

登录后才能评论

评论列表(0条)

    保存