日期:2014-05-18  浏览次数:21013 次

C# 按钮事件问题 && FTP上传大文件长时间未响应
点击按钮上传文件,界面上有一个进度条图片,我想让按钮激发事件时先显示这个进度条图片,再开始上传。目前的问题是:单击按钮后,进度条图片没有显示,一直到文件上传完成后才显示。求大神指点。

源码:
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),并在运行时间很长的操作过程中定期发送消息

------解决方案--------------------
cf.put()方法是异步的吗?
如果是同步的就会阻塞UI线程造成假死
------解决方案--------------------
最简单的方法就是学一下 backgroundworker 控件。是傻瓜级的简单控件,可以解决这类问题。。
------解决方案--------------------
更正一下!是“组件”,但不是控件。
------解决方案--------------------
你需要了解多线程编程的几种方法。