标签:界面 string Text txtResult 线程 new 不卡 上传
- 需求
- 往公司的ftp服务器上传文件,实现一个winform测试工具,要求:
- 1、整个过程不卡界面
- 2、界面的TextArea里依次显示:开始上传 , 上传中...(小点循环从1~3,与此同时开一个线程在后台执行文件上传),上传成功或异常。
- 下面代码中关键知识点:invoke和begininvoke 区别--Invoke()的作用是:在应用程序的主线程上执行指定的委托。
private void button2_Click(object sender, EventArgs e) {//UI线程显示:开始上传 , 上传中...(点循环从1~3) 同时一个后台线程在执行上传,上传成功。 string localPath = textBox3.Text.Trim(); string serverPath = textBox4.Text.Trim(); txtResult.Text = "开始上传"; Thread thread = new Thread(() => { string ip = textBox1.Text.Trim(); int port = int.Parse(textBox2.Text.Trim()); if (txtResult.InvokeRequired)//跨线程调用 { txtResult.Invoke(new Action(() => { string a = $"* 开始上传 {DateTime.Now.ToString()} , {xmlLocalPath}"; txtResult.Text = txtResult.Text + "\r\n" + a; }));//传入一个委托 找到创建控件的线程执行传入的方法 } try { Thread.Sleep(4000);//停顿4s模拟上传过程 } catch (Exception ex) { if (txtResult.InvokeRequired) { txtResult.Invoke(new Action(() => { string b = $"* 上传异常 {DateTime.Now.ToString()}"; txtResult.Text = txtResult.Text + "\r\n" + b; })); } } if (txtResult.InvokeRequired) { txtResult.Invoke(new Action(() => { string b = $"* 上传完毕 {DateTime.Now.ToString()}"; txtResult.Text = txtResult.Text + "\r\n" + b; }));//传入一个委托 找到创建控件的线程执行传入的方法 } }); thread.Start(); }
标签:界面,string,Text,txtResult,线程,new,不卡,上传 来源: https://www.cnblogs.com/anjun-xy/p/12868201.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。