2

データをプルするためのインターフェースを作成しました。いくつかの簡単な手順があります。

ユーザーはドロップボックスから目的のデータを選択し、[利用可能チェック]ボタンをクリックします。利用可能なレコードがある場合は、[リクエストの送信]ボタンが表示されます。

[リクエストの送信]ボタンをクリックすると、SQLテーブルがExcelファイルに送信され、ファイルがvbaでわずかにマッサージされ、ユーザーにこのExcelファイルへのリンクが記載された電子メールがC#から送信されます。

私が直面している問題は、ユーザーが1〜2秒後に焦り、「リクエストの送信」ボタンを何度もマッシュアップし始めることです。この焦りはアプリケーションをクラッシュさせます。

[リクエストの送信]をクリックした後、ページが更新されても、プロセスはサーバー上で実行され、電子メールは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);
}
4

2 に答える 2

1

Excelファイルを作成するには、バックグラウンドワーカースレッドをスピンオフする必要があります。リクエストはすぐにわかりやすいメッセージで応答し、準備ができたらリンクがメールで送信されることを示します。

于 2012-11-02T14:11:21.907 に答える
0

ロジックには、Excelファイルの生成とメールの送信という2つの重い操作が含まれています。サーバーの処理を軽くするためにPaulが提案したように、バックグラウンドスレッドを使用できます。

それ以外の場合は、サーバーから応答が返されるまでページをブロックして、ページの準備ができるまでユーザーがページを操作できないようにします。これは、jQueryブロックUIプラグイン( http://jquery.malsup.com/block/#)を使用して実行できます。

このプラグインの使用例は、ASP.NETフォーラムの投稿に示されています:http://forums.asp.net/p/1656559/4317158.aspx/1?Re + show + progress + in + dialog

于 2012-11-02T15:06:39.820 に答える