Я пытаюсь заставить пользовательский элемент управления работать асинхронно, но независимо от того, что я делаю, он продолжает работать синхронно. Я разделил его до минимума как тестовое веб-приложение. Это будет пользовательский элемент управления:ASP.NET 2.0 Асинхронный пользовательский контроль не работает
<%@ Control Language="C#" %>
<script runat="server">
SqlConnection m_oConnection;
SqlCommand m_oCommand;
void Page_Load(object sender, EventArgs e)
{
Trace.Warn("Page_Load");
string strDSN = ConfigurationManager.ConnectionStrings["DSN"].ConnectionString + ";async=true";
string strSQL = "waitfor delay '00:00:10'; select * from MyTable";
m_oConnection = new SqlConnection(strDSN);
m_oCommand = new SqlCommand(strSQL, m_oConnection);
m_oConnection.Open();
Page.RegisterAsyncTask(new PageAsyncTask(new BeginEventHandler(BeginHandler), new EndEventHandler(EndHandler), new EndEventHandler(TimeoutHandler), null, true));
Page.ExecuteRegisteredAsyncTasks();
}
IAsyncResult BeginHandler(object src, EventArgs e, AsyncCallback cb, object state)
{
Trace.Warn("BeginHandler");
return m_oCommand.BeginExecuteReader(cb, state);
}
void EndHandler(IAsyncResult ar)
{
Trace.Warn("EndHandler");
GridView1.DataSource = m_oCommand.EndExecuteReader(ar);
GridView1.DataBind();
m_oConnection.Close();
}
void TimeoutHandler(IAsyncResult ar)
{
Trace.Warn("TimeoutHandler");
}
</script>
<asp:gridview id="GridView1" runat="server" />
И это будет страница, в которой я хозяйничать элемент управления три раза:
<%@ page language="C#" trace="true" async="true" asynctimeout="60" %>
<%@ register tagprefix="uc" tagname="mycontrol" src="~/MyControl.ascx" %>
<html>
<body>
<form id="form1" runat="server">
<uc:mycontrol id="MyControl1" runat="server" />
<uc:mycontrol id="MyControl2" runat="server" />
<uc:mycontrol id="MyControl3" runat="server" />
</form>
</body>
</html>
страница получает отображаются без ошибок, но след в нижней части на странице показано, что каждый экземпляр управления обрабатывается синхронно. Что я делаю не так? Есть ли настройки конфигурации где-то я не хватает?
mate .. mine все еще не работает, хотя не используется «ExecuteRegisteredAsyncTasks». Страница все еще ждет, пока пользовательский элемент управления завершится .. любые идеи? – user384080 2011-04-17 11:39:54