C# 按钮事件问题 && FTP上传大文件长时间未响应

时间:2021-12-04 22:35:43
点击按钮上传文件,界面上有一个进度条图片,我想让按钮激发事件时先显示这个进度条图片,再开始上传。目前的问题是:单击按钮后,进度条图片没有显示,一直到文件上传完成后才显示。求大神指点。

源码:
private void bt_start_upload_Click(object sender, EventArgs e)
        {
            pic_pro.Visible = true;//显示图片控件
            try
            {             
                cf.Put(filename);//上传
                lb_upload_state.Text = "上传状态:已经成功上传视频:" + fname + "!" ;
            }
            catch(Exception ex)
            {
                MessageBox.Show("错误");
                return;
            }
问题补充:
调试信息:
托管调试助手“ContextSwitchDeadlock”在项目中检测到故障。
其他信息: CLR 无法从 COM 上下文 0x4defe8 转换为 COM 上下文 0x4df158,这种状态已持续 60 秒。拥有目标上下文/单元的线程很有可能执行的是非泵式等待或者在不发送 Windows 消息的情况下处理一个运行时间非常长的操作。这种情况通常会影响到性能,甚至可能导致应用程序不响应或者使用的内存随时间不断累积。要避免此问题,所有单线程单元(STA)线程都应使用泵式等待基元(如 CoWaitForMultipleHandles),并在运行时间很长的操作过程中定期发送消息

6 个解决方案

#1


cf.put()方法是异步的吗?
如果是同步的就会阻塞UI线程造成假死

#2


最简单的方法就是学一下 backgroundworker 控件。是傻瓜级的简单控件,可以解决这类问题。。

#3


更正一下!是“组件”,但不是控件。

#4


引用 3 楼  的回复:
更正一下!是“组件”,但不是控件。

sp大神的签名 越来越亮了

#5


你需要了解多线程编程的几种方法。

#6


引用 2 楼  的回复:
最简单的方法就是学一下 backgroundworker 控件。是傻瓜级的简单控件,可以解决这类问题。。

谢谢!我明白了~~

#1


cf.put()方法是异步的吗?
如果是同步的就会阻塞UI线程造成假死

#2


最简单的方法就是学一下 backgroundworker 控件。是傻瓜级的简单控件,可以解决这类问题。。

#3


更正一下!是“组件”,但不是控件。

#4


引用 3 楼  的回复:
更正一下!是“组件”,但不是控件。

sp大神的签名 越来越亮了

#5


你需要了解多线程编程的几种方法。

#6


引用 2 楼  的回复:
最简单的方法就是学一下 backgroundworker 控件。是傻瓜级的简单控件,可以解决这类问题。。

谢谢!我明白了~~