如何在函数执行一次后删除它
本文关键字:一次 删除 函数 执行 | 更新日期: 2023-09-27 18:05:49
我有一个函数要在单选按钮选中的事件下执行,但它必须只执行一次。在随后的单选按钮选中的事件中,我的函数不应该被调用。
void rb_CheckedChanged(x, y)
{
LoadSomeData(); //need to load only once.
// rest of the code; to be executed every single time..
}
注意:
我希望
LoadSomeData()
只在单选按钮事件下执行。我可以设置一个整数成员变量,并做计数++,n检查如果== 1等。或者一个布尔标志。这不是我想要的
谢谢. .
您可以做的是创建一个您想在事件中调用的函数名称列表,然后从列表中获取方法名称,使用反射调用您感兴趣的方法,然后从列表中删除该方法名称…下一次,当事件再次被调用时,该方法将不会被执行,直到它不在列表中。比如:
List<string> listMethod = new List<string>();
listMethod.Add("LoadSomeData");
然后void rb_CheckedChanged(x, y)
{
string methodName = listMethod[0];
Type.InvokeMember(
methodName,
BindingFlags.InvokeMethod | BindingFlags.Public |
BindingFlags.Static,
null,
null,
null);
listMethod.Clear(); //or remove what ever you want
}
您可以从http://www.codeproject.com/KB/cs/CallMethodNameInString.aspx
您可以设置一个隐藏字段,并将其用作确定是否应该再次运行LoadSomeData
的标志。比如:
void rb_CheckedChanged(x, y)
{
if (hiddenField.Value == "False")
{
LoadSomeData(); //need to load only once.
hiddenField.Value = true.ToString();
}
else
{
// Do nothing.
}
// rest of the code; to be executed every single time..
}
在你的页面:
<asp:HiddenField ID="hiddenField" Value="False" />
我认为选项2是你最好的选择,在它周围有一个粘性bool
private bool stickyFlag = true;
void rb_CheckedChanged(x,y)
{
if (true == stickyFlag)
{
LoadSomeData();
stickyFlag = false;
}
....
// rest of the code; to be executed every single time..
}
你可以用PostSharp [RunOnce]创建一个属性
这个属性可以有一个属性来指示方法是否已经被触发
PostSharp链接
我选择第二个选项,但你可以使用委托:
public event Action doLoadSomeData;
void onLoad(sender, args)
{
doLoadSomeData += LoadSomeData();
}
void rb_CheckedChanged(x, y)
{
if (doLoadSomeData != null)
{
doLoadSomeData(); //need to load only once.
}
doLoadSomeData = null;
// rest of the code; to be executed every single time..
}