更新:我重新启动了我的机器并且它没有500毫秒那么慢,但是为了显示上下文菜单它仍然需要大约40毫秒,我将它与原生的Winforms菜单进行了比较(是比较快的)。另外,我已经通过设置时间戳来验证MyGridMenu.Show
是这里的瓶颈,一旦注释掉,整个功能几乎没有时间。
我正在编写一个基于Devexpress xGrid的应用程序,我需要自定义上下文菜单。我使用了以下代码片段,.Show
函数调用非常长(500毫秒)。对于本机应用程序来说,这种程度的缓慢是无法容忍的,但我对C#,Winforms等真的很陌生,而且我没有想法。有谁知道可能是罪魁祸首?
private void gridControl1_MouseUp(object sender, MouseEventArgs e)
{
Console.WriteLine("Detected your mouse up event!");
var start = DateTime.Now;
GridView view = sender as GridView;
if (e.Button == MouseButtons.Right)
{
DevExpress.XtraGrid.Views.Grid.ViewInfo.GridHitInfo hi = view.CalcHitInfo(new Point(e.X, e.Y));
if (!hi.InColumnPanel)
{
var MyGridMenu = new ExternalManagerContextualMenuView(view)
{
MyDataStore = this.MyDataStore
};
MyGridMenu.Init(hi);
MyGridMenu.Show(hi.HitPoint);
}
var end = DateTime.Now;
Console.WriteLine($"Showing this thing takes {end - start} time");
}
}
答案 0 :(得分:0)
GridView提供PopupMenuShowing事件,允许您添加自定义菜单项。在这种情况下,您不需要处理MouseUp事件。
至于延迟问题,可能是由以下代码引起的:
var MyGridMenu = new ExternalManagerContextualMenuView(view)
{
MyDataStore = this.MyDataStore
};
MyGridMenu.Init(hi);
MyGridMenu.Show(hi.HitPoint);
您可以使用秒表来衡量这些线路占用的时间。
Stopwatch sw = new Stopwatch();
sw.Start();
//your code
sw.Stop();
Debug.WriteLine(sw.ElapsedMilliseconds.ToString());