当前位置:编程学习 > C#/ASP.NET >>

GLOBAL 另起线程使用Application的时候遇到了问题,请高手帮忙解决一下

global代码是这样的
using  Project.Bll.Account.SystemSend;
protected void Application_Start(object sender, EventArgs e)
{
   SystemSend SystemSend=new SystemSend();
   Thread Thd1 = new Thread(new ThreadStart(SystemSend.Call_Get_MessSend));
   Thd1.Start();
}

SystemSend类代码
public void Call_Get_MessSend()
{  
    HttpContext.Current.Application["WindowPrompt"] = ",";//就这里提示我错误,提示HttpContext为null难道给application赋值也出错么 请高手指点一下该怎么解决
}  --------------------编程问答-------------------- 感觉像因为我另起了个线程  然后使用APPLICATION就出现的错误 如果不另起线程就没问题,但是必须起两个线程  期待高手解决!谢谢 --------------------编程问答-------------------- 在web程序非主线程中获取HttpContext肯定获取不到的。

先说说为什么必须在新线程中给Application赋值?

在Global的Application_Start函数的意义就是在启动程序时才运行一次,每次启动也就运行一次,你又可比新开一个线程去给Application赋值呢? --------------------编程问答-------------------- global代码是这样的
using  Project.Bll.Account.SystemSend;
protected void Application_Start(object sender, EventArgs e)
{
  SystemSend SystemSend=new SystemSend();
  Thread Thd1 = new Thread(new ParameterizedThreadStart(SystemSend.Call_Get_MessSend));
  Thd1.Start();
}

SystemSend类代码
public void Call_Get_MessSend(object param)
{
    HttpApplication app = param as HttpApplication;
    app["WindowPrompt"] = ",";//就这里提示我错误,提示HttpContext为null难道给application赋值也出错么 请高手指点一下该怎么解决
}  --------------------编程问答-------------------- 如果真有需要,就从主线程传进来 --------------------编程问答--------------------  public string GetAppState(string key)
        {
            HttpApplicationState Application = HttpContext.Current.Application;
            if (Application[key] == null)
            {
                return null;
            }
            else if (Application[key] is System.String)
            {
                return Application[key].ToString();
            }
            else
            {
                return null;
            }
        }
--------------------编程问答-------------------- 哦, 忘记一点


global
using  Project.Bll.Account.SystemSend;
protected void Application_Start(object sender, EventArgs e)
{
  SystemSend SystemSend=new SystemSend();
  Thread Thd1 = new Thread(new ParameterizedThreadStart(SystemSend.Call_Get_MessSend));
  Thd1.Start(this);//把Application传过去
}

SystemSend类代码
public void Call_Get_MessSend(object param)
{
    HttpApplication app = param as HttpApplication;
    app["WindowPrompt"] = ",";
}  --------------------编程问答-------------------- to 楼上:
以参数的形式把Application传到线程中去赋值,与在主线程中直接给Application赋值,两者都是同一个Application,实在想不明白如何多此一举有什么用?
to 楼主:
在Web应用程序中一般情况下不支持使用多线程。 --------------------编程问答--------------------
引用 7 楼 showlie 的回复:
to 楼上:
以参数的形式把Application传到线程中去赋值,与在主线程中直接给Application赋值,两者都是同一个Application,实在想不明白如何多此一举有什么用?


一个变量倒还可以直接在外面传进去, 那如果2个,3个呢?

所以干脆把Application传进去。




to 楼主:
在Web应用程序中一般情况下不支持使用多线程。


Web应用程序本来就是多线程的应用程序,而且多线程的应用十分广泛。
--------------------编程问答--------------------
引用 8 楼 jzywh 的回复:
引用 7 楼 showlie 的回复:
to 楼上:
以参数的形式把Application传到线程中去赋值,与在主线程中直接给Application赋值,两者都是同一个Application,实在想不明白如何多此一举有什么用?


一个变量倒还可以直接在外面传进去, 那如果2个,3个呢?

所以干脆把Application传进去。




to 楼主:
在Web应用程序中一般情况下不支持使用多线程。


Web应用程序本来就是多线程的应用程序,而且多线程的应用十分广…

学习了
补充:.NET技术 ,  ASP.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,