C#多线程必须加Thread.Sleep()语句么?

a= new Thread(new ThreadStart(delegate { ThreadMethod(); }));
a.Start();
如题,我采用这个方法开启子线程,然后在子线程中执行耗时的代码,并且调用委托来更新UI界面控件。
但是我发现一个问题就是:比如我在代码里写了往textBox里面添加一些字符串,然后后面接着执行耗时的代码。我发现只有当整个代码执行完了,textBox里才会显示添加的数据。但是如果在每条往textBox里添加数据的后面加一句Thread.Sleep()语句,就可以看到是先往textBox里添加的数据了。这点我觉得很奇怪啊,以前安卓开发也遇到过这样的事情,就是往控件里添加数据展示给用户看,如果不加Threa.Sleep()语句的话,就得等数据全部添加完毕之后才能看到,而不是添加一句显示一句,为什么啊?

2个回答

小伙子,在工作线程中去刷新UI,就是调用UI线程的东西的话,如果你想要做到同步的效果,可以使用Invoke就可以。异步效果的话,就是BeginInvoke,至于怎么调用,不用我举例子吧。
http://wenku.baidu.com/link?url=hz6vSo2MVAX9NLB4LjSq_ajQg-EVQMsbOpVid-ut3aSxn0_3Vj_yjoUtV8RgkCg2SaZjFSMloxQon5LDEfu7kRQaKXNAG-GsTeCscmZIoQu

你根本一点概念都没有。首先工作线程不应该直接更新界面,需要用invoke传委托让界面处理。
其次,你更新界面的代码,应该不要包括耗时的操作,否则又相当于单线程了。
最后,thread.sleep只能阻塞进程,适得其反。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
c#多线程的Interkock.Exchange方法执行问题

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Threading; namespace 多线程LOCK.InterLock {//打印机:有三台计算机同事发出打印指令,使用Exchange实现锁 class Program { class Printerwithinterlocktest { public static int computernum = 3;//计算机数量 public static void openthread() { Thread thread; Random random = new Random(); thread = new Thread(printerproc); thread.Name = "mythread"; thread.Start(); } private static void printerproc() { userprint(); Thread.Sleep(1000); } public static int usingprint = 0;//初始化正在打印状态 private static bool userprint() { if ( Interlocked.Exchange(ref usingprint, 1) ==0) { int c = 1; Console.WriteLine(Thread.CurrentThread.Name + "acquired the lock"); Thread.Sleep(5000); Console.WriteLine(Thread.CurrentThread.Name + "existed the lock"); Interlocked.Exchange(ref usingprint, 0); return true; } else { int c = 2; Console.WriteLine(Thread.CurrentThread.Name + "is denited the lock"); return false; } } } static void Main(string[] args) { Printerwithinterlocktest.openthread(); Console.ReadKey(); } } } 这段代码在执行到if ( Interlocked.Exchange(ref usingprint, 1) ==0)时,按照调试结果看是继续执行而不是跳入到Else,想问问到底是先执行Exchange方法还是先比较呢,为什么

c# 多线程 线程循环到一半就不动了

``` Thread Th = new Thread(() => { for (int i = 0; i < 1; i++) { Thread.Sleep(100); Thread T = new Thread(GetItemThrd); T.IsBackground = true; T.Start(); } }); Th.IsBackground = true; Th.Start(); ``` ``` private void GetItemThrd() { int CrtThrdID; lock (this) { CrtThrdID = ThrdID; Interlocked.Increment(ref ThrdID); Invoke(new Action(() => { AddRecordToDT(new List<string>() { CrtThrdID.ToString(), "正在g工作" }, ThrdTable); })); } string CatName = ""; while (true) { if (CatQue.Count > 0) { ``` 以上为多线程循环运行某一段代码的部分代码 但是线程中有foreach循环.foreach循环会循环500次.但是工作到一半就不动了... 就是没有办法循环完 是什么原因呢 ,,改成for循环也没有用

C#多线程的作用是啥?

刚工作没多久,在学校接触的都是普通代码操作,感觉写出来的代码执行效率好慢。于是想到了多线程,但是对于多线程还是半懂不懂,想找人帮忙梳理一下。 我对于多线程的理解是这样的,比如我现在代码的功能是操作一个word模板,模板里有多个表,每个表都需要遍历循环操作每个单元格。按照普通代码操作是循环遍历完一个表之后才能操作下一个表,而多线程的作用则是创建多个线程,每个线程同步循环遍历一个或多个表,在硬件设备支持的条件下,有多少个线程就相当于提高了多少倍的执行效率。 不知道这样的理解是对是错,一样有人帮忙解答一下!

C# 多线程,记录每个线程运行时间

本人菜鸟,在校学生。 最近在学习多线程技术,实现了一个求解数组中最小值的方法,但是在测试多线程与单线程的计算速度时,却不知道那个才是多线程的运行时间(尴尬到窒息!) *多线程求数组中最小值思想:将一个数组分为两个等大的子数组,并新建两个子线程分别求解每个子数组中的最小值,保存在一个全局变量中。* 源程序如下: using System; using System.Collections.Generic; using System.Linq; using System.Threading; using System.Diagnostics; namespace Multithread_PSO { class Program { //定义锁 private static readonly object locker = new object(); static void Main(string[] args) { //元素个数 int EleCounts = 100000; //待处理数组 int[] MyArr = new int[EleCounts]; //前半段数组 int[] TempArr1 = new int[EleCounts / 2]; //后半段数组 int[] TempArr2 = new int[EleCounts / 2]; for (int i = 0; i < EleCounts; i++) { int iSeed = DateTime.Now.Millisecond; Random rd = new Random(iSeed+i); //随机给数组赋值 MyArr[i] = rd.Next(EleCounts); //将数组拆分为两个大小相等的数组 if(i<EleCounts/2) { TempArr1[i] = MyArr[i]; } else { TempArr2[i - EleCounts / 2] = MyArr[i]; } } //主线程 FindMinElement(MyArr); //新建两个线程th1,th2 Thread th1 = new Thread(new ParameterizedThreadStart(thFindMinElement)); th1.Name = "子线程1"; Thread th2 = new Thread(new ParameterizedThreadStart(thFindMinElement)); th2.Name = "子线程2"; Stopwatch sw = new Stopwatch(); sw.Start(); th1.Start(TempArr1); //th1.Join(); th2.Start(TempArr2); //th2.Join(); sw.Stop(); TimeSpan ts2 = sw.Elapsed; Console.WriteLine("多线程获得最小值为: {0}, 计时器3共耗时:{1}/ms!\n", MinValue, ts2.TotalMilliseconds); Console.ReadKey(); } public static void thFindMinElement(object DivMyArr) { Stopwatch sw = new Stopwatch(); sw.Start(); string ThNumber = Thread.CurrentThread.ManagedThreadId.ToString(); int[] MyArr = (int[])DivMyArr; if (IsFirstRun) { MinValue = MyArr[0]; IsFirstRun = false; } for (int i = 1; i < MyArr.Length; i++) { if (MinValue > MyArr[i]) MinValue = MyArr[i]; } sw.Stop(); TimeSpan ts2 = sw.Elapsed; Console.WriteLine("当前线程名称(ID)为:{1} ({0}),最小值为:{2},共耗时:{3}/ms!\n", ThNumber, Thread.CurrentThread.Name, MinValue, ts2.TotalMilliseconds); } public static void FindMinElement(int[] DivMyArr) { Stopwatch sw = new Stopwatch(); sw.Start(); string ThNumber = Thread.CurrentThread.ManagedThreadId.ToString(); int[] MyArr = DivMyArr; MinValue = MyArr[0]; for (int i = 1; i < MyArr.Length; i++) { if (MinValue > MyArr[i]) MinValue = MyArr[i]; } sw.Stop(); TimeSpan ts2 = sw.Elapsed; Console.WriteLine("主线程ID为:{0},最小值为: {1}, 共耗时:{2}/ms!\n", ThNumber, MinValue, ts2.TotalMilliseconds); } private static int minValue; private static bool IsFirstRun = true; private static int MinValue { get { lock (locker) { return minValue; } } set { minValue = value; } } } } ***问题1:*** 如果不添加 th1.Join()和 th2.Join(),运行结果如下,请问计时器3是多线程运行时间吗? ![图片说明](https://img-ask.csdn.net/upload/201705/04/1493881888_346609.png) ***问题2:*** 如果添加 th1.Join()和 th2.Join(),运行结果如下,请问计时器3是多线程运行时间吗? ![图片说明](https://img-ask.csdn.net/upload/201705/04/1493881971_593742.png) ***问题3:*** 如果均不是,那该怎么计算多线程的总运行时间呢,还望大神不吝赐教!!!

c# winform 多线程异常无法捕获,导致程序闪退

伪代码为: try { if (helper.TogetherBookThread != null && helper.TogetherBookThread.IsAlive) { return; } helper.TogetherBookThread = new Thread(new ThreadStart(delegate() { try { while (true) { if (helper.TicketQuery != null) { Dictionary<string, TicketOrderCSun> TicketOrderCSunDic = helper.TicketQuery.TicketOrderCSunDic; foreach (var cSun in TicketOrderCSunDic.Values) { bool flag = helper.DetermineBookOrderNewAction(cSun, helper); if (flag) { Thread.CurrentThread.Abort(); } } } Thread.Sleep(1); } } catch (ThreadAbortException) { } catch (Exception ex) { if (!(ex is ThreadAbortException)) { NetTicketCommonUtil.WriteTicketInfo("TogetherBookDetermineBookOrderThread " + ex.Message + " source:" + ex.StackTrace); } } })); helper.TogetherBookThread.IsBackground = true; helper.TogetherBookThread.Priority = ThreadPriority.Highest; helper.TogetherBookThread.Start(); //helper.TogetherBookThread.IsBackground = true; //helper.TogetherBookThread.Priority = ThreadPriority.Highest; ////helper.TogetherBookThread.ApartmentState = ApartmentState.STA; //helper.TogetherBookThread.Start(); } catch (Exception ex) { if (!(ex is ThreadAbortException)) { NetTicketCommonUtil.WriteTicketInfo("TogetherBookDetermineBookOrderThreadAAA:" + ex.Message + " source:" + ex.StackTrace); } } 每隔一毫秒就在里面判断是否有执行的任务,如果,有任务执行,并且成功,就退出线程。但是经常出现闪退。程序外面我已经加了全局捕获。但是无法捕获闪退日志。我查看windows日志,提示。 Framework Version: v4.0.30319 Description: The process was terminated due to an unhandled exception. Exception Info: System.NullReferenceException Stack: at NetTicket.Actions.NetTicketHelper+<>c__DisplayClassc.<TogetherBookDetermineBookOrderMainAction>b__a() at System.Threading.ThreadHelper.ThreadStart_Context(System.Object) at System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean) at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean) at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object) at System.Threading.ThreadHelper.ThreadStart() 提示空指针异常。我里面都执行都是try catch过。不明白为什么闪退。全局都是无提示的。。找了很久不知道原因

c# 线程挂起后messagebox.show造成程序卡死

``` //t2.Resume(); if (DialogResult.Yes == MessageBox.Show("检查尚未完成,是否确认停止检查", "提示", MessageBoxButtons.YesNo)) { t2.Abort();// 用于终止当前线程 timer1.Enabled = false; MessageBox.Show("一键检查完成"); button3.Visible = false; button1.Text = "重新检查"; } ``` messagebox.show无法弹出,直接卡死,怎么解决?

c#多线程处理控件问题

1.要实现label1 和label12 显示自加,两个线程同时执行。 2.目前显示刷新存在卡顿 3.怎么做到互不干扰,异步执行,类似单个线程,快速刷新界面? ``` using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Threading; namespace WindowsFormsApplication1 { public partial class Form1 : Form { int a2 = 0, b2 = 0,c2=0; Thread a, b; public Form1() { InitializeComponent(); a = new Thread(a4); b = new Thread(b4); } private void button2_Click(object sender, EventArgs e) { a.Start(); } private void button3_Click(object sender, EventArgs e) { b.Start(); } private void a4() { while (true) { a1(); } } private void b4() { while (true) { b1(); } } private delegate void ThreadDelegate(); private void a1() { if (label1.InvokeRequired) { ThreadDelegate a3 = new ThreadDelegate(a1); label1.Invoke(a3); } else { a2 = a2 + 1; label1.Text = Convert.ToString(a2); } } private void b1() { if (label2.InvokeRequired) { ThreadDelegate b3 = new ThreadDelegate(b1); label2.Invoke(b3); } else { b2 = b2 + 1; label2.Text = Convert.ToString(b2); } } } } ```

c# 关于_方法内局部变量和线程栈_的问题

static void Main(string[] args) { System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance); int a = 0; int b = 0; int c = 0; Task.Run(() => { while (true) { Console.WriteLine("我是Task任务中的方法,ThreadID:{0}", Thread.CurrentThread.ManagedThreadId); Console.WriteLine("a={0},b={1},c={2}", a, b, c); Thread.Sleep(1000); } }); Thread.Sleep(500); while (true) { Thread.Sleep(1000); a++; b++; c++; Console.WriteLine("我是主线程中的方法,ThreadID:{0}", Thread.CurrentThread.ManagedThreadId); Console.WriteLine("a={0},b={1},c={2}", a, b, c); } } 请问一下大家: 1.方法内的局部变量是否在线程栈上? 2.线程栈上的变量可否在多个线程之间共享? 3.在Task.Run中,在新线程执行时,是不是要将原线程栈中的局部变量复制到新线程的线程栈中? 4.为什么在 主线程中 对方法内 局部变量 的修改,会影响另一个线程(Task) 这4个问题是关联的,如果前面的问题有错误,那么后面的问题也就无意义啦! 请大家指教!

关于C#多线程调用的问题

我的窗体是MDI多文档窗体,我在主窗体顶部天界了菜单,点击菜单弹出子窗体,但是因为我要用到数据库,所以我想在点击窗体这块使用线程,但是提示错误说线程间操作无效: 从不是创建控件"MainWindow"的线程访问它.,我看到论坛中说用到委托,可是我还不会,请教大神。 private void OpenTrainScheduleInquiryWindow() //线程用到的函数 { if (trainScheduleInquiry == null || trainScheduleInquiry.IsDisposed) { trainScheduleInquiry = new TrainScheduleInquiryWindow(); trainScheduleInquiry.MdiParent = this; trainScheduleInquiry.Show(); } else { trainScheduleInquiry.WindowState = FormWindowState.Maximized; trainScheduleInquiry.Activate(); } } private void Menu_TrainScheduleInquiry_Click(object sender, EventArgs e) { Thread openWindow = new Thread(OpenTrainScheduleInquiryWindow); openWindow.Start();//点击菜单显示子窗体的线程 } 请教大神这个用委托怎么写

关于C#异步多线程编写时准确传参的问题

如题,如何做到在多个带参数线程依次执行时传参准确,我的具体情况如下: 线程执行函数中带有参数dotime,同时为保证异步顺次执行,使用了信号量,代码为 ```public class proinformation { ... public int dotime; ... public async void Threadbuild() { await slim.WaitAsync(); ... Thread.Sleep(dotime * 1000); ... slim.Release(); } }``` 以上封装在一个类中,在窗体控件Form类中,有触发函数 ```proin[x].dotime = proin[x].lesstime; pro = new Thread(proin[x].Threadbuild); pro.Start();``` 如果X=1,2,3,相当于创建了3个进程,其dotime参数假设为2,4,5,但在我实际操作过程中发现问题 即本来应该是执行2S,4S,5S的进程的实际执行情况为5S,5S,5S,即重复最后一次执行 我个人认为原因可能在于传参时覆盖了前一参数,故有上述问题,我该如何准确传参?

C#多线程处理实现post并发请求

需求是这样:如从文件中读取了10条数据,将数据参数循环给post请求,然后分别记录每个请求所用时间,最后记录平均请求时间,希望能从原有代码上使用多线程处理。请求和响应。 原有代码: //读取excel ds = Extensions.FilesIO.ExcelRead(file_path, "sheet1"); for (int i = 0; i < 5; i++) { id = ds.Tables[0].Rows[i][0].ToString().Trim(); name = ds.Tables[0].Rows[i][1].ToString().Trim(); //请求参数 var par = new Dictionary<string, string>(); par.Add("name", name); par.Add("id", id); //测试demo result = Extensions.Http_Conn.SendPost(url, par, "get"); 记录当前请求时间 } 记录平均时间

一个关于C#多线程与定时器的问题

private void button4_Click(object sender, EventArgs e) { DataGetThreads[0] = new Thread(new ThreadStart(DataGet)); DataGetThreads[0].Start(); } public void DataGet() { timerDraw.Interval = 200; timerDraw.Start(); //MessageBox.Show("如果加上这句")① } private void timerDraw_Tick(object sender, EventArgs e) { MessageBox.Show("已开始定时");② } 从按下button4开始, 为什么如果我没有写①这句语句,系统就不会执行②这句语句,系统没有反应;如果我写了①这句,执行结果是弹出“如果加上这句”这个窗口,然后无限地弹出“已开始定时”?很不解,为什么加了一句话定时器就工作,没加就不工作?是不是多线程和定时器有冲突?求解!谢谢!

C#多线程访问PLC MXComponent

![图片说明](https://img-ask.csdn.net/upload/201904/29/1556549325_63419.png) 开三个线程同时读取三菱PLC内变量数据。不知道问什么报错,用单线程就没有问题。第一个线程能通过,第二个就报错。 public partial class Form1 : Form { public ACTETHERLib.ActQNUDECPUTCP plc1 = null; public ACTETHERLib.ActQNUDECPUTCP plc2 = null; public ACTETHERLib.ActQNUDECPUTCP plc3 = null; public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { this.plc1 = new ACTETHERLib.ActQNUDECPUTCP(); this.plc2 = new ACTETHERLib.ActQNUDECPUTCP(); this.plc3 = new ACTETHERLib.ActQNUDECPUTCP(); this.plc1.ActHostAddress ="192.168.1.21"; this.plc1.ActHostAddress = "192.168.1.31"; this.plc1.ActHostAddress = "192.168.1.41"; int rtn1 = this.plc1.Open(); int rtn2 = this.plc2.Open(); int rtn3 = this.plc3.Open(); if (rtn1 == 0) MessageBox.Show("PLC1 Connect Succesful !"); else MessageBox.Show("PLC1 Connect Fail,Please Check Comunication Setting!"); if (rtn2 == 0) MessageBox.Show("PLC1 Connect Succesful !"); else MessageBox.Show("PLC2 Connect Fail,Please Check Comunication Setting!"); if (rtn3 == 0) MessageBox.Show("PLC1 Connect Succesful !"); else MessageBox.Show("PLC2 Connect Fail,Please Check Comunication Setting!"); Thread Read_PLC1_thread = new Thread(new ThreadStart(Read_PLC1)); Thread Read_PLC2_thread = new Thread(new ThreadStart(Read_PLC2)); Thread Read_PLC3_thread = new Thread(new ThreadStart(Read_PLC3)); Read_PLC1_thread.Start(); Read_PLC2_thread.Start(); Read_PLC3_thread.Start(); } private void Read_PLC1() { int[] PLC1_D = new int[100]; int rtn1 = this.plc1.ReadDeviceBlock("D1", 10, out PLC1_D[1]); } private void Read_PLC2() { int[] PLC2_D = new int[100]; int rtn2 = this.plc2.ReadDeviceBlock("D1", 10, out PLC2_D[1]); } private void Read_PLC3() { int[] PLC3_D = new int[100]; int rtn3 = this.plc3.ReadDeviceBlock("D1", 10, out PLC3_D[1]); } } ![图片说明](https://img-ask.csdn.net/upload/201904/07/1554638887_266844.png) }

C# 多线程读写删除文件并绘制在picture上

namespace PictureSD { public partial class Form1 : Form { public Form1() { InitializeComponent(); } bool flag; bool flag2; private Object thisLock = new object(); ComputePic face; Thread ThreadSamp;// 图片 Bitmap bc1; Bitmap bc2; Graphics gc1; private string dir = @"C:\Users\Teefan\Desktop\C#聊天\NEWFACElog\Camera\Camera\bin\Debug\Images\7.jpg"; private string dir2 = @"C:\Users\Teefan\Desktop\C#聊天\NEWFACElog\Camera\Camera\bin\Debug\Images"; private void button1_Click(object sender, EventArgs e) { System.Drawing.Image img= System.Drawing.Image.FromFile(dir);// 读7号图片测试 Bitmap imgBit = new Bitmap(img); SaveBit(imgBit, dir2, 2, "jpg");//存2号 imgBit.Dispose(); if (face == null) { ThreadSamp = new Thread(createSamp); // 计算人脸 ThreadSamp.IsBackground = true; ThreadSamp.Start(); } ThreadSamp.Join(); bc1.Dispose(); gc1.Dispose(); string img2 = dir2 + "/" + 2.ToString() + ".jpg"; File.Delete(img2); } class ComputePic { public int weight; public int height; public ComputePic(int a,int b) { weight = a; height = b; } } private void createSamp() { flag2 = false; face = new ComputePic(pictureBox1.Width, pictureBox1.Height); //假定在计算 bc1 = new Bitmap(dir2 + "/" + "2.jpg"); gc1 = Graphics.FromImage(bc1); RectangleF rect1 = new RectangleF(10, 20, face.weight++, face.height++); gc1.DrawImage(bc1, 0, 0, rect1, GraphicsUnit.Pixel); pictureBox1.Invoke((MethodInvoker)delegate //操作其他控件的语句 { pictureBox1.Image = bc1; pictureBox1.Refresh(); }); face = null; } private bool SaveBit(Bitmap bitmap, string path, int num, string kind) { string img = path + "/" + num.ToString() + "." + kind; bitmap.Save(img); return flag = true; } private void timer1_Tick(object sender, EventArgs e) { // button1_Click(button1, null); } private void button2_Click(object sender, EventArgs e) { System.Timers.Timer t = new System.Timers.Timer(2000); //实例化Timer类,设置间隔时间为10000毫秒; t.Elapsed += new System.Timers.ElapsedEventHandler(button1_Click); //到达时间的时候执行事件; t.AutoReset = true; //设置是执行一次(false)还是一直执行(true); t.Enabled = true; } } } 是这样的,我做了一个界面想实现一个功能,相当于读7号图片,存时命名为2号,然后利用多线程计算2号图片,得到坐标,在绘制picture上,最后删除2号图片,再读7号,在2号计算、坐标、绘制。基本就是这个顺序不要乱,可是我琢磨几天了,要么gdi错误,要么bc1对象被别处引用,我不知道我这样的顺序应该怎么实现!或许很简单,可是我琢磨好久了,真心求教多线程而且能做到不会冲突的高手,我的代码只能基本实现图片删除,不能体现在picture画的样子刷新上!

C#创建线程调用方法参数出错

我想创建几个线程来熟悉多线程的一些知识于是写了一个小程序 ``` using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Threading; namespace 多线程试验 { class Program { static void Main(string[] args) { int 线程计数器 = 1; 函数库 H = new 函数库(); Thread th1 = new Thread(new ThreadStart(H.显示(线程计数器))); 线程计数器++; Thread th2 = new Thread(new ThreadStart(H.显示(线程计数器))); 线程计数器++; Thread th3 = new Thread(new ThreadStart(H.显示(线程计数器))); 线程计数器++; } } } ``` 上面是主方法,下面是我要用到的方法 ``` using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Threading; using System.Windows; namespace 多线程试验 { class 函数库 { public void 显示(int i) { Console.WriteLine("这是第{0}个线程",i); Thread.Sleep(2000); Console.WriteLine("第{0}个线程结束",i); } } } ``` 但是在主函数中直接调用就没问题,但是如果在创建线程的时候作为参数调用方法就会出问题,错误提示是“应输入方法名称”。求各位大神解惑,先谢过! 错误代码是 Thread th1 = new Thread(new ThreadStart(H.显示(线程计数器))); Thread th2 = new Thread(new ThreadStart(H.显示(线程计数器))); Thread th3 = new Thread(new ThreadStart(H.显示(线程计数器))); 这三句

C#多线程异步线程监控的问题

我现在除主线程外又写了一个异步线程A 但是我主线程往下执行时,会有一程序需要在这个异步线程完成后才能继续执行, 我现在想写一个异步线程B,来实时监控线程A的执行状态,当线程A执行完后返回true 来让主线程继续执行 请大神帮忙给组织下逻辑

C#如何使用WinHttp.WinHttpRequest.5.1

C#如何使用WinHttp.WinHttpRequest.5.1

c#多线程2个托管只跑了一个

当执行了下属代码后进度条能够正常运行,label1.text并没有根据x值的变化连续变化 ``` using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Threading; namespace WindowsFormsApplication6 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } DateTime dt; int x = 0; int y = 0; private void button1_Click(object sender, EventArgs e) { timer1.Enabled = true; x = 0; Thread myThread = new Thread(DoData); Thread myThread1 = new Thread(Viewlabel); myThread.IsBackground = true; myThread1.IsBackground = true; myThread1.Start(int.Parse(textBox1.Text)); myThread.Start(int.Parse(textBox1.Text)); dt = DateTime.Now; } private delegate void ViewlabelDelegate(object number); private void Viewlabel(object number) { int i = 1, sum = 0; if (label1.InvokeRequired) { ViewlabelDelegate v = Viewlabel; label1.Invoke(v, number); } else { bool flag = true; while (flag) { flag = y < (int)number; sum += i++; label1.Text = sum.ToString(); Application.DoEvents(); } MessageBox.Show(sum.ToString()); } } private delegate void DoDataDelegate(object number); /// <summary> /// 进行循环 /// </summary> /// <param name="number"></param> private void DoData(object number) { if (progressBar1.InvokeRequired) { DoDataDelegate d = DoData; progressBar1.Invoke(d, number); } else { progressBar1.Maximum = (int)number; bool flag = true; while (flag) { flag = x < (int)number; progressBar1.Value = x; Application.DoEvents(); } MessageBox.Show(DateTime.Now.Subtract(dt).ToString()); //循环结束截止时间 } } private void timer1_Tick(object sender, EventArgs e) { x = x + 1; y = y + 1; } } } ``` 当把Viewlabel代码改为下面代码后sum正常计数 ``` private void Viewlabel(object number) { int i = 1, sum = 0; while (x < (int)number) { sum += i++; Application.DoEvents(); } MessageBox.Show(sum.ToString()); ```

关于C#线程暂停的问题

做一个下载程序,在不同的时间段自动下载不同时间段更新的文件, 怎样让它下载完某个一个时间段的文件后暂停,等到下一个时间段在自动下载? 由于不同的时间段间隔比较大,而且根据网速的不同下载文件的速度也会不同, 比如早上6点开始下载,可能7点下载完也可能12点才下载完 ,下一个文件更新的时间段是中午12点,时间就不会太固定, 所以我觉得thead.sleep()不是个好方法,请问下还有其他的方法吗?

程序员的兼职技能课

获取讲师答疑方式: 在付费视频第一节(触摸命令_ALL)片头有二维码及加群流程介绍 限时福利 原价99元,今日仅需39元!购课添加小助手(微信号:csdn590)按提示还可领取价值800元的编程大礼包! 讲师介绍: 苏奕嘉&nbsp;前阿里UC项目工程师 脚本开发平台官方认证满级(六级)开发者。 我将如何教会你通过【定制脚本】赚到你人生的第一桶金? 零基础程序定制脚本开发课程,是完全针对零脚本开发经验的小白而设计,课程内容共分为3大阶段: ①前期将带你掌握Q开发语言和界面交互开发能力; ②中期通过实战来制作有具体需求的定制脚本; ③后期将解锁脚本的更高阶玩法,打通任督二脉; ④应用定制脚本合法赚取额外收入的完整经验分享,带你通过程序定制脚本开发这项副业,赚取到你的第一桶金!

Windows版YOLOv4目标检测实战:训练自己的数据集

课程演示环境:Windows10; cuda 10.2; cudnn7.6.5; Python3.7; VisualStudio2019; OpenCV3.4 需要学习ubuntu系统上YOLOv4的同学请前往:《YOLOv4目标检测实战:训练自己的数据集》 课程链接:https://edu.csdn.net/course/detail/28745 YOLOv4来了!速度和精度双提升! 与 YOLOv3 相比,新版本的 AP (精度)和 FPS (每秒帧率)分别提高了 10% 和 12%。 YOLO系列是基于深度学习的端到端实时目标检测方法。本课程将手把手地教大家使用labelImg标注和使用YOLOv4训练自己的数据集。课程实战分为两个项目:单目标检测(足球目标检测)和多目标检测(足球和梅西同时检测)。 本课程的YOLOv4使用AlexyAB/darknet,在Windows系统上做项目演示。包括:安装软件环境、安装YOLOv4、标注自己的数据集、整理自己的数据集、修改配置文件、训练自己的数据集、测试训练出的网络模型、性能统计(mAP计算)和先验框聚类分析。还将介绍改善YOLOv4目标检测性能的技巧。 除本课程《Windows版YOLOv4目标检测实战:训练自己的数据集》外,本人将推出有关YOLOv4目标检测的系列课程。请持续关注该系列的其它视频课程,包括: 《Windows版YOLOv4目标检测实战:人脸口罩佩戴检测》 《Windows版YOLOv4目标检测实战:中国交通标志识别》 《Windows版YOLOv4目标检测:原理与源码解析》

lena全身原图(非256*256版本,而是全身原图)

lena全身原图(非256*256版本,而是全身原图) lena原图很有意思,我们通常所用的256*256图片是在lena原图上截取了头部部分的256*256正方形得到的. 原图是花花公子杂志上的一个

快速入门Android开发 视频 教程 android studio

这是一门快速入门Android开发课程,顾名思义是让大家能快速入门Android开发。 学完能让你学会如下知识点: Android的发展历程 搭建Java开发环境 搭建Android开发环境 Android Studio基础使用方法 Android Studio创建项目 项目运行到模拟器 项目运行到真实手机 Android中常用控件 排查开发中的错误 Android中请求网络 常用Android开发命令 快速入门Gradle构建系统 项目实战:看美图 常用Android Studio使用技巧 项目签名打包 如何上架市场

Java调用微信支付

Java 使用微信支付 一. 准备工作 1.

汽车租赁管理系统需求分析规格说明书

汽车租赁管理系统需求分析规格说明书,这只是一个模板,如果有不会的可以借鉴一下,还是蛮详细的。。。。

C/C++跨平台研发从基础到高阶实战系列套餐

一 专题从基础的C语言核心到c++ 和stl完成基础强化; 二 再到数据结构,设计模式完成专业计算机技能强化; 三 通过跨平台网络编程,linux编程,qt界面编程,mfc编程,windows编程,c++与lua联合编程来完成应用强化 四 最后通过基于ffmpeg的音视频播放器,直播推流,屏幕录像,

程序员的算法通关课:知己知彼(第一季)

【超实用课程内容】 程序员对于算法一直又爱又恨!特别是在求职面试时,算法类问题绝对是不可逃避的提问点!本门课程作为算法面试系列的第一季,会从“知己知彼”的角度,聊聊关于算法面试的那些事~ 【哪些人适合学习这门课程?】 求职中的开发者,对于面试算法阶段缺少经验 想了解实际工作中算法相关知识 在职程序员,算法基础薄弱,急需充电 【超人气讲师】 孙秀洋&nbsp;| 服务器端工程师 硕士毕业于哈工大计算机科学与技术专业,ACM亚洲区赛铜奖获得者,先后在腾讯和百度从事一线技术研发,对算法和后端技术有深刻见解。 【课程如何观看?】 PC端:https://edu.csdn.net/course/detail/27272 移动端:CSDN 学院APP(注意不是CSDN APP哦) 本课程为录播课,课程无限观看时长,但是大家可以抓紧时间学习后一起讨论哦~

机器学习初学者必会的案例精讲

通过六个实际的编码项目,带领同学入门人工智能。这些项目涉及机器学习(回归,分类,聚类),深度学习(神经网络),底层数学算法,Weka数据挖掘,利用Git开源项目实战等。

Python入门视频精讲

Python入门视频培训课程以通俗易懂的方式讲解Python核心技术,Python基础,Python入门。适合初学者的教程,让你少走弯路! 课程内容包括:1.Python简介和安装 、2.第一个Python程序、PyCharm的使用 、3.Python基础、4.函数、5.高级特性、6.面向对象、7.模块、8.异常处理和IO操作、9.访问数据库MySQL。教学全程采用笔记+代码案例的形式讲解,通俗易懂!!!

我以为我对Mysql事务很熟,直到我遇到了阿里面试官

太惨了,面试又被吊打

深度学习原理+项目实战+算法详解+主流框架(套餐)

深度学习系列课程从深度学习基础知识点开始讲解一步步进入神经网络的世界再到卷积和递归神经网络,详解各大经典网络架构。实战部分选择当下最火爆深度学习框架PyTorch与Tensorflow/Keras,全程实战演示框架核心使用与建模方法。项目实战部分选择计算机视觉与自然语言处理领域经典项目,从零开始详解算法原理,debug模式逐行代码解读。适合准备就业和转行的同学们加入学习! 建议按照下列课程顺序来进行学习 (1)掌握深度学习必备经典网络架构 (2)深度框架实战方法 (3)计算机视觉与自然语言处理项目实战。(按照课程排列顺序即可)

Java62数据提取代码

利用苹果手机微信下面的wx.data文件提取出62数据,通过62可以实现不同设备直接登陆,可以通过文件流的方式用脚本上传到服务器进行解析

Python代码实现飞机大战

文章目录经典飞机大战一.游戏设定二.我方飞机三.敌方飞机四.发射子弹五.发放补给包六.主模块 经典飞机大战 源代码以及素材资料(图片,音频)可从下面的github中下载: 飞机大战源代码以及素材资料github项目地址链接 ————————————————————————————————————————————————————————— 不知道大家有没有打过飞机,喜不喜欢打飞机。当我第一次接触这个东西的时候,我的内心是被震撼到的。第一次接触打飞机的时候作者本人是身心愉悦的,因为周边的朋友都在打飞机, 每

2018年全国大学生计算机技能应用大赛决赛 大题

2018年全国大学生计算机技能应用大赛决赛大题,程序填空和程序设计(侵删)

Lena图像处理测试专业用图,高清完整全身原图

Lena图像处理测试专业用图,高清完整全身原图,该图片很好的包含了平坦区域、阴影和纹理等细节,这些都有益于测试各种不同的图像处理算法。它是一幅很好的测试照片!其次,由于这是一个非常有魅力女人的照片。

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

verilog实现地铁系统售票

使用 verilog 实现地铁售票

Python+OpenCV计算机视觉

Python+OpenCV计算机视觉系统全面的介绍。

Python可以这样学(第四季:数据分析与科学计算可视化)

董付国老师系列教材《Python程序设计(第2版)》(ISBN:9787302436515)、《Python可以这样学》(ISBN:9787302456469)配套视频,在教材基础上又增加了大量内容,通过实例讲解numpy、scipy、pandas、statistics、matplotlib等标准库和扩展库用法。

150讲轻松搞定Python网络爬虫

【为什么学爬虫?】 &nbsp; &nbsp; &nbsp; &nbsp;1、爬虫入手容易,但是深入较难,如何写出高效率的爬虫,如何写出灵活性高可扩展的爬虫都是一项技术活。另外在爬虫过程中,经常容易遇到被反爬虫,比如字体反爬、IP识别、验证码等,如何层层攻克难点拿到想要的数据,这门课程,你都能学到! &nbsp; &nbsp; &nbsp; &nbsp;2、如果是作为一个其他行业的开发者,比如app开发,web开发,学习爬虫能让你加强对技术的认知,能够开发出更加安全的软件和网站 【课程设计】 一个完整的爬虫程序,无论大小,总体来说可以分成三个步骤,分别是: 网络请求:模拟浏览器的行为从网上抓取数据。 数据解析:将请求下来的数据进行过滤,提取我们想要的数据。 数据存储:将提取到的数据存储到硬盘或者内存中。比如用mysql数据库或者redis等。 那么本课程也是按照这几个步骤循序渐进的进行讲解,带领学生完整的掌握每个步骤的技术。另外,因为爬虫的多样性,在爬取的过程中可能会发生被反爬、效率低下等。因此我们又增加了两个章节用来提高爬虫程序的灵活性,分别是: 爬虫进阶:包括IP代理,多线程爬虫,图形验证码识别、JS加密解密、动态网页爬虫、字体反爬识别等。 Scrapy和分布式爬虫:Scrapy框架、Scrapy-redis组件、分布式爬虫等。 通过爬虫进阶的知识点我们能应付大量的反爬网站,而Scrapy框架作为一个专业的爬虫框架,使用他可以快速提高我们编写爬虫程序的效率和速度。另外如果一台机器不能满足你的需求,我们可以用分布式爬虫让多台机器帮助你快速爬取数据。 &nbsp; 从基础爬虫到商业化应用爬虫,本套课程满足您的所有需求! 【课程服务】 专属付费社群+每周三讨论会+1v1答疑

获取Linux下Ftp目录树并逐步绑定到treeview

在linux下抓取目录树,双击后获取该节点子节点(逐步生成)。另外有两个类,一个是windows下的(一次性获取目录树),一个是linux下的(足部获取目录树)

YOLOv3目标检测实战系列课程

《YOLOv3目标检测实战系列课程》旨在帮助大家掌握YOLOv3目标检测的训练、原理、源码与网络模型改进方法。 本课程的YOLOv3使用原作darknet(c语言编写),在Ubuntu系统上做项目演示。 本系列课程包括三门课: (1)《YOLOv3目标检测实战:训练自己的数据集》 包括:安装darknet、给自己的数据集打标签、整理自己的数据集、修改配置文件、训练自己的数据集、测试训练出的网络模型、性能统计(mAP计算和画出PR曲线)和先验框聚类。 (2)《YOLOv3目标检测:原理与源码解析》讲解YOLOv1、YOLOv2、YOLOv3的原理、程序流程并解析各层的源码。 (3)《YOLOv3目标检测:网络模型改进方法》讲解YOLOv3的改进方法,包括改进1:不显示指定类别目标的方法 (增加功能) ;改进2:合并BN层到卷积层 (加快推理速度) ; 改进3:使用GIoU指标和损失函数 (提高检测精度) ;改进4:tiny YOLOv3 (简化网络模型)并介绍 AlexeyAB/darknet项目。

手把手实现Java图书管理系统(附源码)

【超实用课程内容】 本课程演示的是一套基于Java的SSM框架实现的图书管理系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的java人群。详细介绍了图书管理系统的实现,包括:环境搭建、系统业务、技术实现、项目运行、功能演示、系统扩展等,以通俗易懂的方式,手把手的带你从零开始运行本套图书管理系统,该项目附带全部源码可作为毕设使用。 【课程如何观看?】 PC端:https://edu.csdn.net/course/detail/27513 移动端:CSDN 学院APP(注意不是CSDN APP哦) 本课程为录播课,课程2年有效观看时长,大家可以抓紧时间学习后一起讨论哦~ 【学员专享增值服务】 源码开放 课件、课程案例代码完全开放给你,你可以根据所学知识,自行修改、优化

微信小程序开发实战之番茄时钟开发

微信小程序番茄时钟视频教程,本课程将带着各位学员开发一个小程序初级实战类项目,针对只看过官方文档而又无从下手的开发者来说,可以作为一个较好的练手项目,对于有小程序开发经验的开发者而言,可以更好加深对小程序各类组件和API 的理解,为更深层次高难度的项目做铺垫。

Java 最常见的 200+ 面试题:面试必备

这份面试清单是从我 2015 年做了 TeamLeader 之后开始收集的,一方面是给公司招聘用,另一方面是想用它来挖掘在 Java 技术栈中,还有那些知识点是我不知道的,我想找到这些技术盲点,然后修复它,以此来提高自己的技术水平。虽然我是从 2009 年就开始参加编程工作了,但我依旧觉得自己现在要学的东西很多,并且学习这些知识,让我很有成就感和满足感,那所以何乐而不为呢? 说回面试的事,这份面试...

Java基础知识面试题(2020最新版)

文章目录Java概述何为编程什么是Javajdk1.5之后的三大版本JVM、JRE和JDK的关系什么是跨平台性?原理是什么Java语言有哪些特点什么是字节码?采用字节码的最大好处是什么什么是Java程序的主类?应用程序和小程序的主类有何不同?Java应用程序与小程序之间有那些差别?Java和C++的区别Oracle JDK 和 OpenJDK 的对比基础语法数据类型Java有哪些数据类型switc...

三个项目玩转深度学习(附1G源码)

从事大数据与人工智能开发与实践约十年,钱老师亲自见证了大数据行业的发展与人工智能的从冷到热。事实证明,计算机技术的发展,算力突破,海量数据,机器人技术等,开启了第四次工业革命的序章。深度学习图像分类一直是人工智能的经典任务,是智慧零售、安防、无人驾驶等机器视觉应用领域的核心技术之一,掌握图像分类技术是机器视觉学习的重中之重。针对现有线上学习的特点与实际需求,我们开发了人工智能案例实战系列课程。打造:以项目案例实践为驱动的课程学习方式,覆盖了智能零售,智慧交通等常见领域,通过基础学习、项目案例实践、社群答疑,三维立体的方式,打造最好的学习效果。

微信小程序 实例汇总 完整项目源代码

微信小程序 实例汇总 完整项目源代码

基于西门子S7—1200的单部六层电梯设计程序,1部6层电梯

基于西门子S7—1200的单部六层电梯设计程序,1部6层电梯。 本系统控制六层电梯, 采用集选控制方式。 为了完成设定的控制任务, 主要根据电梯输入/输出点数确定PLC 的机型。 根据电梯控制的要求,

相关热词 c#中如何设置提交按钮 c#帮助怎么用 c# 读取合并单元格的值 c#带阻程序 c# 替换span内容 c# rpc c#控制台点阵字输出 c#do while循环 c#调用dll多线程 c#找出两个集合不同的
立即提问