簡體   English   中英

Aspx頁面等待指示器的多線程C#

[英]Multi-threading C# for aspx page wait-indicator

我試圖在我的aspx頁面上表明它正在處理請求。 也許這不是最好的方法。 但是我似乎找不到另一種方法來使它工作。 我希望我想做的事情有意義。 感謝您的幫助和建議。

無論如何,這里是ASPX代碼:

<asp:Content ID="Content1" runat="server" ContentPlaceHolderID="content">

<style type="text/css">
    #UpdatePanel1, #UpdatePanel2, #UpdateProgress1 { 
        border-right: gray 1px solid; border-top: gray 1px solid; 
        border-left: gray 1px solid; border-bottom: gray 1px solid;
    }
    #UpdatePanel1, #UpdatePanel2 { 
        width:200px; height:200px; position: relative;
        float: left; margin-left: 10px; margin-top: 10px;
    }
    #UpdateProgress1 {
        width: 400px; background-color: #FFC080; 
        bottom: 0%; left: 0px; position: absolute;
    }
</style>
    <div>
        <asp:ScriptManager ID="ScriptManager2" runat="server" />
        <asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" runat="server">
            <ContentTemplate>
                <%=DateTime.Now.ToString(CultureInfo.InvariantCulture) %> <br /> 
            </ContentTemplate>
        </asp:UpdatePanel>
        <asp:UpdateProgress ID="UpdateProgress1" runat="server">
            <ProgressTemplate>
                Archiving...
            </ProgressTemplate>
        </asp:UpdateProgress>
    </div>

<table cellpadding="0" cellspacing="0">
    <tr>
        <td>
            <ul>
                <li>
                    <span>
                        <asp:ImageButton ID="ArchiveImageButton" runat="server" AlternateText="Archive Compliance"
                            ImageUrl="~/images/Icons/24/452-bank.gif" OnClick="Button_Click" ToolTip="Archive compliance results" />
                    </span>

                </li>
            </ul>
        </td>
    </tr>

這是C#背后的代碼:

    private bool archiving;

    protected void Button_Click(object sender, EventArgs e)
    {
        archiving = true;
        WaitHandle wait = new EventWaitHandle(false, EventResetMode.AutoReset);
        ThreadPool.QueueUserWorkItem(state => btnArchive_Click(sender, e));
        ThreadPool.QueueUserWorkItem(sleepState => Sleep());
        ThreadPool.RegisterWaitForSingleObject(wait, delegate { WakeMeUp(); }, false, 9999999999999999, true);
    }

    private void WakeMeUp()
    {
        archiving = false;
    }

    private void Sleep()
    {
        while (archiving)
        {
            Thread.Sleep(1);
        }
    }

    protected void btnArchive_Click(object sender, EventArgs e)
    {
         //DO WORK
         ShowSuccessMessage("Compliance results have been archived.");
    }

出於您的目的,聽起來似乎更容易顯示JavaScript。 下面是代碼, 是一個jsFiddle進行演示。

<script type="text/javascript">
    showOverlay = function(){
        var overlay = document.getElementById("overlay");
        if (overlay){
            overlay.style.display = "block";
        }
    }     
</script>
<asp:Button ID="Button1" runat="server" Text="Submit" OnClientClick="showOverlay();" />
<div id="overlay">
    <div id="wait-dialog">Please wait while the form processes...</div>
</div>

這是您需要的CSS:

#overlay {
    display: none;
    position: absolute;
    left: 0;
    top: 0;
    background-color: #666;
    width: 100%;
    height: 100%;
    z-index: 100;
}
div#wait-dialog {
    margin: 0px auto;
    padding: 20px;
    text-align:center;
    width: 400px;
    min-height: 200px;
    background-color: #ccc;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM