C# 在点击时隐藏和显示按钮

C# hide and show buttons on click

我正在尝试显示执行存储过程的 运行 按钮,该按钮在单击时隐藏并且出现另一个按钮显示 'spinner/loader' 按钮,直到执行完成返回到 运行.

当我单击 运行 时,虽然我没有看到按钮有任何变化,但程序会执行。当我删除底部的代码时,按钮会在存储过程完成后发生变化。

在点击事件的顶部我有:

btnRun.Visible = false;
LoadButton.Visible = true; 

在底部:

LoadButton.Visible = false;
btnRun.Visible = true;

我猜这与 post 背部有关,这附近有没有?

编辑:这是我的点击事件 -

protected void Run_Click(object sender, EventArgs e)
{
    using (SqlConnection con = new SqlConnection(dbString))
    using (SqlCommand cmd = new SqlCommand("dbo.ExecuteJob", con))
    {
        try
        {
            btnRun.Visible = false;
            LoadButton.Visible = true;
            System.Threading.Thread.Sleep(100);

            string JobName = "CTIOM: " + ddlJob.SelectedItem.Text;

            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.AddWithValue("@job_name", JobName);

            SqlParameter statusParameter = new SqlParameter
            {
                ParameterName = "@returnStatus",
                SqlDbType = SqlDbType.Int,
                //Size = 255,
                Direction = ParameterDirection.Output
            };

            SqlParameter messageParameter = new SqlParameter
            {
                ParameterName = "@returnMessage",
                SqlDbType = SqlDbType.VarChar,
                Size = 1000,
                Direction = ParameterDirection.Output
            };

            SqlParameter durationParameter = new SqlParameter
            {
                ParameterName = "@returnRunDuration",
                SqlDbType = SqlDbType.VarChar,
                Size = 8,
                Direction = ParameterDirection.Output
            };

            cmd.Parameters.Add(statusParameter);
            cmd.Parameters.Add(messageParameter);
            cmd.Parameters.Add(durationParameter);

            con.Open();

            IAsyncResult result = cmd.BeginExecuteNonQuery();
            while (!result.IsCompleted)
            {                        
                System.Threading.Thread.Sleep(100);
            }
            cmd.EndExecuteNonQuery(result);

            string statusMessage = statusParameter.Value.ToString();
            lblStatus.Visible = true;
            lblStatus.Text = statusMessage;

            string returnMessage = messageParameter.Value.ToString();
            lblMessage.Visible = true;
            lblMessage.Text = returnMessage;
        }

        catch (SqlException ex)
        {
            ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "alertMessage", "alert('" + ex.Message.ToString() + "')", true);
            return;
        }

        finally
        {
            con.Close();

            LoadButton.Visible = false;
            btnRun.Visible = true;
        }
    }
}

对元素的更改仅在回发后发送一次,而不是在您更改它们时立即发送。很确定要完成您正在尝试做的事情(在回发为 运行 时显示微调器),您将需要使用类似 UpdateProgress control.

的东西