我在一个组中有一些复选框,以下是事件处理程序和相关的方法。
public async void CheckedChanged(object sender, EventArgs e)
{
System.Diagnostics.Debug.WriteLine($"Calling CheckedChanged {s.Name}: {s.CheckState}");
await Filter();
}
public async Task Filter()
{
System.Diagnostics.Debug.WriteLine($"Calling Filter");
// ....
}
但是,以下调试输出显示,每次复选框状态更改时,方法Filter
被调用两次。
Calling CheckedChanged CheckBox1: Checked Calling Filter Calling Filter Calling CheckedChanged CheckBox1: Unchecked Calling Filter Calling Filter
方法Filter
有一些非常昂贵的数据库调用,SQL Profiler显示这些调用也被调用了两次。
事实证明,在Filter
中调用了方法Task.Run(...)
,调试器无法获取调用者。接受的答案有助于找出答案。
答案 0 :(得分:1)
您确定只从CheckedChanged调用Filter方法吗? 试试这样的东西
public async void CheckedChanged(object sender, EventArgs e)
{
System.Diagnostics.Debug.WriteLine($"Calling CheckedChanged {s.Name}: {s.CheckState}");
await Filter(nameof("CheckedChanged"));
}
public async Task Filter(string caller = "undefined")
{
System.Diagnostics.Debug.WriteLine($"Calling Filter from {caller}");
// ....
}