asp.net 进度条的有关问题

asp.net 进度条的问题
我做了一个系统,系统里面有一个功能邮件发送,但是附件上传很慢,操作起来就像系统卡死一样,有什么好的办法解决吗,最好是加一个进度条之类的东西,如果加进度条怎么样添加。
------解决思路----------------------
用线程发送邮件,然后根据上传的大小来更新进度条请看这里
------解决思路----------------------
转换一下思路 使用Uploadify插件吧 
------解决思路----------------------
系统卡死一样 , 应该是只用了一个线程吧  再添加一个线程  这样上传时候界面就不会假死了
------解决思路----------------------
UpdateProgress进度条显示、取消功能示例
//设置显示进度条
  <form id="form1" runat="server">
    <div>
        <asp:ScriptManager ID="ScriptManager1" runat="server"/>
        <!--注意以下JavaScript脚本必须位于ScriptManager之后,否则会抛出异常-->
 <script type="text/javascript" language="javascript">
     // 取得 PageRequestManager 类的实例
    var pageManager=Sys.WebForms.PageRequestManager.getInstance();
    // 设置当引发 initializeRequest 事件时便运行事件处理函数 initializeRequest
    pageManager.add_initializeRequest(initializeRequest);
    function initializeRequest(sender, args)
    {
      if(pageManager.get_isInAsyncPostBack())
      {
         args.set_cancel(true);
      }
    }
     // 如果当前正在处理一个异步回发而且此异步回发是由“取消加载...”按钮所引发的话,
     // 就调用 PageRequestManager 实例的 abortPostBack 方法来取消异步回发。
    function AbortPostBack()
    {
      if(pageManager.get_isInAsyncPostBack())
      {
        pageManager.abortPostBack();
      }
    }
    </script>
        <br />
        <asp:UpdatePanel ID="UpdatePanel1" runat="server">
            <ContentTemplate>
                <asp:Label ID="lbTimer" runat="server"></asp:Label>
                <br />
                <asp:Button ID="btnCommit" runat="server" Text="单击我,将开始加载Web窗体页的数据..." 
                    onclick="btnCommit_Click" />
            </ContentTemplate>
        </asp:UpdatePanel>
    
    </div>
    <asp:UpdateProgress ID="UpdateProgress1" runat="server">
        <ProgressTemplate>
           <div style="font-size:xx-small">
           服务器加载中...<img src="wait.gif" />
           <input id="cmdCancel" onclick="AbortPostBack()" type="button" value="取消加载..." />
           </div>
        </ProgressTemplate>
    </asp:UpdateProgress>
    </form>
//处理进度条显示事件
 protected void btnCommit_Click(object sender, EventArgs e)
    {
        System.Threading.Thread.Sleep(5000);//延时5秒钟
        lbTimer.Text = DateTime.Now.ToLongTimeString();//5秒后进度条将消失
    }