protected void Page_Load(object sender, EventArgs e) {
if (!IsPostBack) { // sadly, **never** in here }
MyInit() // Slow initialization method, that I only wan't to call one time.
}
所以,如果我无法将MyInit()
收入if
,我是否可以使用OnNeedDataSource()
解决我的表现/打击问题?
答案 0 :(得分:1)
不确定这是不是你的意思,但是为了从Page_Load初始化一次,你可以使用带有静态bool的静态类来确定它是否已被初始化。鉴于它在Page_Load上,你还需要防范多个线程 - 所以使用双重检查锁来使其线程安全并防止竞争条件。
public static class InitMe
{
private static bool isInitialized = false;
private static object theLock = new Object();
public static void MyInit()
{
if(!isInitialized)
{
lock(theLock);
{
if(!isInitialized) // double checked lock for thread safety
{
// Perform initialization
isInitialized = true;
}
}
}
}
}
并在您的Page_Load中,通过InitMe.MyInit()
希望有所帮助。
答案 1 :(得分:0)
试试这个:
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
if (!Page.IsPostBack) { MyInit(); }
}
我假设您在页面或用户控件中......
HTH。