[英]gridview.rendercontrol returns System.Web.UI.HtmlTextWriter
[英]System.Web.UI.Control.RenderControl fails when called from background thread
我需要在后台線程中呈現控件,並通過郵件發送輸出。 所以我將這段代碼在后台線程中運行:
System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(sendmail), new Object());
public void sendmail(object o)
{
UserControl cntrl = new Page().LoadControl("~/mycontrol.ascx") as UserControl;
StringWriter stringwriter = new StringWriter();
Html32TextWriter htmlwriter = new Html32TextWriter(stringwriter);
cntrl.RenderControl(htmlwriter);
SendEmailUsingNetMail(stringwriter);
}
At runtime I am getting this exception
System.NullReferenceException: Object reference NOT SET TO an instance of an object.
AT System.Web.UI.HtmlControls.HtmlForm.GetActionAttribute()
AT System.Web.UI.HtmlControls.HtmlForm.RenderAttributes(HtmlTextWriter writer)
AT System.Web.UI.HtmlControls.HtmlControl.RenderBeginTag(HtmlTextWriter writer)
AT System.Web.UI.HtmlControls.HtmlContainerControl.Render(HtmlTextWriter writer)
AT System.Web.UI.HtmlControls.HtmlForm.Render(HtmlTextWriter output)
AT System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
AT System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)
AT System.Web.UI.HtmlControls.HtmlForm.RenderControl(HtmlTextWriter writer)
AT System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)
AT System.Web.UI.Control.RenderChildren(HtmlTextWriter writer)
AT System.Web.UI.Control.Render(HtmlTextWriter writer)
AT System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
AT System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)
AT System.Web.UI.Control.RenderControl(HtmlTextWriter writer)
AT RedBus.RBMail.sendmail(object o)
從asp.net請求線程運行時,相同的代碼運行良好。 是否有可能讓此東西在后台線程本身中工作? 如果是,怎么辦?
謝謝,Pradhan
將表單添加到頁面:
System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(sendmail), new Object());
public void sendmail(object o)
{
System.Web.UI.Page() pageHolder = new System.Web.UI.Page()
{AppRelativeTemplateSourceDirectory = HttpRuntime.AppDomainAppVirtualPath };
System.Web.UI.HtmlControls.HtmlForm form = new System.Web.UI.HtmlControls.HtmlForm();
UserControl cntrl = new Page().LoadControl("~/mycontrol.ascx") as UserControl;
form.Controls.Add(cntrl );
pageHolder.Controls.Add(form);
StringWriter stringwriter = new StringWriter();
HttpContext.Current.Server.Execute(pageHolder, stringwriter, false);
SendEmailUsingNetMail(stringwriter);
}
另外,我編寫了一個名為ucajax的OSS項目來完成此任務 ,該庫旨在與Web服務一起使用,但是沒有理由您不能直接調用方法來呈現控件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.