不卡界面,实现文件上传

Posted anjun-xy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了不卡界面,实现文件上传相关的知识,希望对你有一定的参考价值。

  • 需求
  • 往公司的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 + "
" + 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 + "
" + b;
				})); 
			}
		}
		if (txtResult.InvokeRequired)
		{
			txtResult.Invoke(new Action(() =>
			{
				string b = $"* 上传完毕 {DateTime.Now.ToString()}";
				txtResult.Text = txtResult.Text + "
" + b;
			}));//传入一个委托 找到创建控件的线程执行传入的方法
		}
	});
	thread.Start();
}

以上是关于不卡界面,实现文件上传的主要内容,如果未能解决你的问题,请参考以下文章

java Ftp上传创建多层文件的代码片段

大文件上传下载实现思路,分片断点续传代码实现,以及webUpload组件

如何在 BottomNavigationView 的片段上打开搜索界面?

Alamofire 文件上传出现错误“JSON 文本未以数组或对象开头,并且允许未设置片段的选项”

使用超链接和后台Servlet实现文件上传和下载(附图和代码)

怎么用jsp实现拖拽上传图片?