Tag: 挂起

WebClient DownloadFileAsync挂起

美好的一天。 我正在使用DownloadFileAsync处理文件下载器类。 在正常情况下一切正常。 但是当我下载文件并禁用网络连接时,下载进度只是停止无限时间,不会引发任何错误或调用任何回调。 任何想法如何处理这种情况? 非常感谢。 _client.Proxy = WebRequest.DefaultWebProxy; _client.DownloadProgressChanged += (sender, argv) => { actionCallback(argv.ProgressPercentage); } _client.DownloadFileCompleted += (sender, argv) => { if (argv.Error != null) { _exc = argv.Error; } set event } Task.Factory.StartNew(() => { _client.DownloadFileAsync(request, targetFileName); thread sync if (_exc != null) { logger.ErrorException(exc); throw; } 问题出现在Vista和2k8下。 在Win7上一切正常。

在TcpClient BeginConnect之后,应用程序在退出时挂起20秒

我有TcpClient.BeginConnect()和TcpClient.EndConnect()方法的奇怪行为的问题。 我使用BeginConnect()为Connect()方法添加超时(请参阅下面的扩展方法代码)。 如果我连接,我调用EndConnect()并且一切正常,但是如果我超时我不能调用EndConnect(),因为它会阻塞大约20秒,所以我只是调用这个非阻塞代码: result.AsyncWaitHandle.Close(); result.AsyncWaitHandle.Dispose(); client.Close(); 问题是当我在超时后关闭表单(在运行代码之后)我的应用程序将“挂起”大约20秒。 有什么方法可以阻止这种悬挂吗? 这只是在应用程序退出时很不愉快,所以,如果没有其他可能的话,它可能是一些肮脏的杀戮;] 一些说明: 只有在我无法连接到服务器时才会挂起。 退出时,表单将关闭,只有一些进程仍在后台运行。 如果我按下VS2013中的暂停按钮,应用程序挂起,我没有接受任何代码,所以我想这是一些自动创建的线程,其中挂起代码(EndConnect()?)被调用。 当我在超时后等待大约20秒(应用程序响应)然后我关闭表单时没有挂起 – 所以这个阻塞代码(EndConnect()?)会自动从其他一些线程调用。 如果我调用方法TcpClient.Connect()(没有超时)我被阻止大约20秒,但退出时没有挂起。 如果我在超时时运行此非阻塞代码: client.Client.Close(); client.Client.Dispose(); client.Close(); 它仍会在退出时挂起。 即使我将BeginConnect(ip,port,null,null)更改为BeginConnect(ip,port,new AsyncCallback(ConnectCallback),null)并在ConnectCallback中调用客户端上的EndConnect()和Close(),应用程序仍会挂起(ConnectCallback)在退出之前被调用并且其代码没有挂起)。 我写了大约20秒,但它更像是(20 – 超时)秒。 在我的代码II中有超时= 1秒,所以在这种情况下应用程序挂起大约20秒。 以下是我的连接代码: public bool Connect(string localMachineName) { // Get ips for local machine IPAddress[] ips; try { ips = Dns.GetHostEntry(localMachineName).AddressList.Where( o => o.AddressFamily == AddressFamily.InterNetwork).ToArray(); } catch […]

有谁知道我收到HttpWebRequest超时的原因?

我想知道你是否可以帮我解决我遇到的一个错误。 我有一个我创建的HTTP管理器,可以帮助我处理来自网站的POSTing / GETing数据。 直到最近,当我试图使用两者的混合物时,它一直工作正常。 第一个循环循环一切正常,在第二个循环上它挂起在HttpWebRequest.GetRequestStream()上。 我已经在网上阅读并找不到真正的解决方案。 以下是获取/接收的代码块: ASCIIEncoding encoding = new ASCIIEncoding(); byte[] buffer = encoding.GetBytes(_PostData); _HttpWebRequest = (HttpWebRequest)WebRequest.Create(_FetchUrl); _HttpWebRequest.Credentials = _Credentials; _HttpWebRequest.Method = _RequestType.ToString(); _HttpWebRequest.ContentType = “application/x-www-form-urlencoded”; _HttpWebRequest.ContentLength = buffer.Length; _HttpWebRequest.UserAgent = userAgent; _HttpWebRequest.CookieContainer = _CookieContainer; _HttpWebRequest.KeepAlive = false; _HttpWebRequest.AllowAutoRedirect = _AllowAutoRedirect; _HttpWebRequest.AutomaticDecompression = DecompressionMethods.GZip; _HttpWebRequest.ServicePoint.Expect100Continue = false; if (_RequestType.Equals(RequestTypes.POST)) { // Write […]

无需中止或挂起即可立即终止无环线程

我正在实现一个协议库。 这是一个简化的描述。 主函数中的主线程将始终检查网络流上是否有某些数据(在tcpclient中)。 让我们说响应是收到的消息,而线程是一个正在运行的线程。 thread = new Thread(new ThreadStart(function)); thread.IsBackground = true; thread.Start(); while(true){ response = receiveMessage(); if (response != null) { thread.Suspend(); //I am searching for an alternative for the line above and not thread.Abort(). thread2 = new Thread(new ThreadStart(function2)); thread2.IsBackground = true; thread2.Start(); } } 到目前为止一切顺利,在while循环中实际上有更多的消息,并且还有一个用于处理不同类型的传入消息的状态机,但这应该足够了。 (还有不仅仅是函数“function”和“function2”)。 所以无论如何这些函数在这个应用程序中看起来都不清楚,因为协议是程序员隐藏的并且意味着它是一个库。 这意味着协议将启动一些程序员定义的函数作为线程,具体取决于程序在协议中的状态。 因此,如果接收到特殊响应(例如callAnotherFunction消息),我想突然终止一个线程(此处命名为“thread”),让我们说在100毫秒内。 但是我不知道它是在一个循环内执行还是没有循环,并且在它终止之前需要多少处理。 如何在不弃用Suspend或Exceptionthrowing Abort函数的情况下停止这些线程? […]

在C#中发送密钥“挂起”PC

当我在Form_Shown() send key并将Breakpoint放在Form_KeyDown()时,我的PC挂起 private void Form1_KeyDown(object sender, KeyEventArgs e) { //breakpoint here if (e.KeyCode == Keys.A) { MessageBox.Show(“caught”); } } private void Form1_Shown(object sender, EventArgs e) { SendKeys.Send(“A”); }

离开屏幕保护程序或锁定计算机后程序挂起

我们的程序工作正常,直到有人锁定计算机或屏幕保护程序弹出(但不是ctrl + alt + delete) 。 一旦计算机解锁/屏幕保护程序关闭,应用程序将停止绘制除标题栏以外的所有内容,并停止响应输入 – 它显示一个无法移动或关闭的大部分白色窗口。 (应用程序冻结示例 – 山脉来自我的桌面背景) 如果我们让它静置大约5到10分钟,它会恢复生命,并且不会再次挂起(即使在锁定计算机/屏幕保护程序弹出窗口之后),直到应用程序重新启动。 调试很困难,因为只有在手动打开.exe时才从Visual Studio启动程序时才会发生这种情况。 它只在显示启动画面时发生 – 如果我删除代码以显示启动画面,它就会停止发生。 但是,我们需要启动画面。 我在这个页面上尝试了所有的建议 ; 唯一没有发生的是使用Microsoft.VisualBasic.WindowsFormsApplicationBase ,但这会导致各种其他问题。 互联网上有关这方面的信息似乎很少 – 以前有人遇到过类似的问题吗? 这是相关的代码: //Multiple programs use this login form, all have the same issue public partial class LoginForm where TMainForm : Form, new() { private readonly Action _showLoadingForm; public LoginForm(Action showLoadingForm) […]

为什么这段代码会在从StreamReader到达第一个ReadLine时挂起?

我在第一个arg中将一个大文件传递给下面的SendXMLFile(),但由于它导致手持设备“挂起”/“冻结”,我暂时硬编码了一个小得多的文件(3 KB而不是1121 KB)用于检测。 该文件确实存在(与.exe / .dll位于同一文件夹中),如下代码所示: // test with smaller file: fileName = “DSD_v6666_3_20140310140737916.xml”; MessageBox.Show(“Made it before file.Open”); using (FileStream fileTest = File.Open(fileName, FileMode.CreateNew)) { fileTest.Write(info, 0, info.Length); fileTest.Flush(); } if (!File.Exists(fileName)) { MessageBox.Show(String.Format(“{0} does not seem to exist”, fileName)); } else { MessageBox.Show(String.Format(“{0} DOES seem to exist”, fileName)); } string justFileName = Path.GetFileNameWithoutExtension(fileName); String […]

onuserpreferencechanged hang – 处理多个表单和mutlipe ui线程

我认为我的问题类似于: .NET 4.0和可怕的OnUserPreferenceChanged Hang 我也看了看: http://ikriv.com/en/prog/info/dotnet/MysteriousHang.html#BeginInvokeDance 我删除了我们的启动画面。 我还尝试添加建议的代码:Microsoft.Win32.SystemEvents.UserPreferenceChanged + = delegate {}; 到我们的main()方法。 我正在寻找有关如何排除故障的一些想法和信息。 对于我们的main()方法,我们启动一个windowmanager类,它是一个使用Application.Run的表单。它只是任务栏中的一个图标(我们不显示窗口)。 每当我们启动一个对象时,我们都有一个后台线程,它创建一个表单,然后执行Application.Run(form) 在Application.Run(form)form.IsHandleCreated = false时。 我使用MysteriousHang网站上的冰箱应用程序。 (我修改它以继续在循环中发送更改通知)。 我应该如何处理创建和运行新表单? 是否在后台线程上创建表单是否重要,即使它的句柄尚未创建?