
下面是内存溢出 jb51.cc 通过网络收集整理的代码片段。
内存溢出小编现在分享给大家,也给大家做个参考。
private voID Form1_Load(object sender,EventArgs e) { Thread fd_thr = new Thread(this.fileDownload); fd_thr.Start(); fd_thr.Suspend(); // 挂起线程,过时 fd_thr.Resume(); // 恢复线程,过时 } private voID fileDownload() { byte[] buffer = null; using (WebClIEnt clIEnt = new WebClIEnt()) buffer = clIEnt.DownloadData("http://www.baIDu.com"); Console.Writeline(EnCoding.UTF8.GetString(buffer)); } 下面的代码,貌似没有问题,但你可能会在输出面板会出现一句错误“引发的异常: private autoresetEvent fd_thr_supend = new autoresetEvent(false); private voID Form1_Load(object sender,EventArgs e) { Thread fd_thr = new Thread(this.fileDownload); fd_thr.Start(); this.fd_thr_supend.reset(); // 挂起线程 this.fd_thr_supend.Set(); // 恢复线程 } private voID fileDownload() { byte[] buffer = null; using (WebClIEnt clIEnt = new WebClIEnt()) buffer = clIEnt.DownloadData("http://www.baIDu.com"); this.fd_thr_supend.WaitOne(); // 阻塞,等待信号 Console.Writeline(EnCoding.UTF8.GetString(buffer)); } 上面则配合autoresetEvent方式配合进行线程的挂起或恢复,这样做有利代码的 [Dllimport("kernel32.dll",SetLastError = true)] private static extern int GetCurrentThreadID(); [Dllimport("kernel32.dll",SetLastError = true)] private static extern int SuspendThread(IntPtr hThread); [Dllimport("kernel32.dll",SetLastError = true)] public static extern uint ResumeThread(IntPtr hThread); public int hCurrenthThreadID; [Dllimport("kernel32.dll",SetLastError = true)] public static extern IntPtr OpenThread(int DWDesiredAccess,bool binheritHandle,uint DWThreadID); public const int THREADACCESS_SUSPEND_RESUME = 0x0002; private voID Form1_Load(object sender,EventArgs e) { Thread fd_thr = new Thread(this.fileDownload); fd_thr.Start(); while (this.hCurrenthThreadID == 0); // 等待线程被启动 IntPtr hCurrenthThread = OpenThread(THREADACCESS_SUSPEND_RESUME,false,(uint)this.hCurrenthThreadID); // 挂起线程 SuspendThread(hCurrenthThread); // 恢复线程 ResumeThread(hCurrenthThread); } private voID fileDownload() { this.hCurrenthThreadID = GetCurrentThreadID(); byte[] buffer = null; using (WebClIEnt clIEnt = new WebClIEnt()) buffer = clIEnt.DownloadData("http://www.baIDu.com"); Console.Writeline(EnCoding.UTF8.GetString(buffer)); } 上面的方法也不安全,因为上面的做法其实与Thread.Resume()与Thread.Suspend()两个函数的 以上是内存溢出(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
总结以上是内存溢出为你收集整理的C# 线程的挂起与恢复全部内容,希望文章能够帮你解决C# 线程的挂起与恢复所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)