我创建了一个拉取数据的界面,有几个简单的步骤。
用户从投递箱中选择所需数据,点击“检查可用”按钮,如果有可用记录,则会显示“发送请求”按钮。
单击发送请求按钮后,SQL表将被发送到excel文件,文件稍微用vba进行按摩,然后用户通过电子邮件从C#发送一个指向此excel文件的链接。
我面临的问题是,用户在一两秒钟后就会感到不耐烦,并一遍又一遍地开始混搭“发送请求”按钮。这种不耐烦会使应用程序崩溃。
如何使页面运行以便在单击“发送请求”后刷新页面,但仍然在服务器上执行该过程,并且仍然从C#发送电子邮件。
public void SendRequest_Click(object sender, EventArgs e)
{
//Insert amazing line of code that refreshes the web form but does everything beyond this line
SendRequest.Visible = false;
//Creating a new class
QueryMule mule = new QueryMule();
Label11.Visible = true;
string myfilename = Label3.Text;
string splitusernum = Label4.Text;
string dtablenum = Label4.Text;
string exportnum = Label4.Text;
//Export all export tables to mercuryexport excel file
mule.SQLExport(18, splitusernum, exportnum);
//Creating a new excel application to open the mercury template and run its macro
ExcelApp.Application appExl;
ExcelApp.Workbook workbook;
ExcelApp.Worksheet newSheet;
ExcelApp.Range Range;
appExl = new ExcelApp.Application();
RegionName.SelectedItem.Value + timestampeddone + ".xlsm";
workbook = appExl.Workbooks.Open(@"filepath", Missing.Value,
Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value,
Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value,
Missing.Value, Missing.Value, Missing.Value);
appExl.Visible = true;
appExl.DisplayAlerts = true;
System.Net.Mail.MailMessage message = new System.Net.Mail.MailMessage();
message.To.Add '''REMOVED EMAIL ADDRESS
message.Subject = "Delivery System";
message.From '''REMOVED EMAIL ADDRESS
message.Body = "filepath" + myfilename;
System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient("mailhost");
smtp.Send(message);
Label4.Text = "Email Sent";
mule.DropTable(dtablenum);
mule.DropTable1(dtablenum);
mule.DropTable2(dtablenum);
mule.DropExportTable(dtablenum);
}
答案 0 :(得分:1)
您需要剥离后台工作线程以创建excel文件。然后,请求将立即响应一条友好消息,表明他们将在准备好时通过电子邮件发送链接。
答案 1 :(得分:0)
您的逻辑包括两个重量级操作:生成Excel文件和发送邮件。您可以使用Paul建议的后台线程来使服务器处理更轻松。
否则,阻止页面直到您收到服务器的响应,以便用户在页面准备好之前将无法与页面交互。您可以使用jQuery块UI插件(http://jquery.malsup.com/block/#).
执行此操作此插件的示例用法显示在ASP.NET论坛帖子中:http://forums.asp.net/p/1656559/4317158.aspx/1?Re+show+progress+in+dialog