线程中调用Request报"请求在此上下文中不可用。"

asdfa23rdadsdfa 2011-02-13 10:20:15

public string DecryptionParms
{
get
{
return Request.QueryString["tosee"]; //这里报错
}
}

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
if (CheckParms())
{
Thread thread = new Thread(Check);

thread.IsBackground = true;

thread.Start();

Response.Write(" ");
}
}
}

protected static readonly RequestDetails objRequestDetails = new RequestDetails();

public void Check()
{
string[] parms = DecryptionParms.Split('#');
bool relParms = true;
long[] longParms = new long[3];
for (int i = 0; i < 3; i++)
{
if (string.IsNullOrEmpty(parms[i]))
{
relParms = false;
break;
}
else
{
relParms = long.TryParse(parms[i], out longParms[i]);
if (!relParms)
break;
}
}
if (relParms)
{
objRequestDetails.Visitor = longParms[0];
objRequestDetails.VisitorPage = longParms[1];
objRequestDetails.VisitorPage = longParms[2];
objRequestDetails.ImageOutCode = string.Empty;
objRequestDetails.Behavior = 0; //访问
try
{
lock (objRequestDetails)
{
StatisticsManager.AddRequestDetails(objRequestDetails);
Thread.Sleep(1000);
}
Response.Write(" ");
}
catch (SqlException se)
{
Response.Write(se.Message);
}
}
}

/// <summary>
/// 检查参数是否传递过来
/// </summary>
/// <returns></returns>
protected bool CheckParms()
{
if (string.IsNullOrEmpty(Request.QueryString["tosee"]))
return false;
else
return true;
}
...全文
496 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
AdmiralMeng 2012-05-15
  • 打赏
  • 举报
回复
楼主厉害,钓了俩老鬼出来。
shfongfeng 2011-12-14
  • 打赏
  • 举报
回复
很有收获,刚遇到这问题,呵呵!谢谢各楼啊!
asdfa23rdadsdfa 2011-02-13
  • 打赏
  • 举报
回复
知道了。
孟子E章 2011-02-13
  • 打赏
  • 举报
回复
另外一个方法,你可以把你的Thread放在一个类里面,类里面定义一个 System.Web.HttpContext 类型的变量
孟子E章 2011-02-13
  • 打赏
  • 举报
回复
Thread t = new Thread (new ParameterizedThreadStart(xxxx));
t.Start (System.Web.HttpContext.Current);

static void xxxx(object context)
{
HttpContext xtc = context as HttpContext
}
asdfa23rdadsdfa 2011-02-13
  • 打赏
  • 举报
回复
人生如梦。注释写下呗
asdfa23rdadsdfa 2011-02-13
  • 打赏
  • 举报
回复
人生如梦。注释写下呗
wuyq11 2011-02-13
  • 打赏
  • 举报
回复
Thread th = new Thread(new ParameterizedThreadStart(method));
th.Start("参数"));
private void method(string s)
{}
public Thread(
ParameterizedThreadStart start
)
public delegate void ParameterizedThreadStart(
Object obj
)
asdfa23rdadsdfa 2011-02-13
  • 打赏
  • 举报
回复
Thread thread = new Thread(Check);
这一步只有无参的方法可以传递
孟子E章 2011-02-13
  • 打赏
  • 举报
回复
一个办法是将 HttpContext.Current.Request对象作为参数,再调用的时候传递到线程里面
孟子E章 2011-02-13
  • 打赏
  • 举报
回复
线程里面不是Request请求,哪来的 HttpContext.Current.Request啊
asdfa23rdadsdfa 2011-02-13
  • 打赏
  • 举报
回复
我把Request.QueryString["tosee"]; 放到Check()里获取,调式了二次,一次成功,一次报"请求在此上下文中不可用"
asdfa23rdadsdfa 2011-02-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wuyq11 的回复:]
HttpContext.Current.Request
[/Quote]
试过了。
也一样。

然后Thread调用的方法里不能Repsonse.Write吗
wuyq11 2011-02-13
  • 打赏
  • 举报
回复
HttpContext.Current.Request

62,047

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧