Slow showing / drawing dialogue with ListBox?

戏子无情 提交于 2019-12-02 12:02:18

The ListBox has to redraw every time you add an item. You can either use Dmitry's method of using AddRange(), or you can wrap your loop with BeginUpdate()/EndUpdate() calls.

ListBoxProjectType.BeginUpdate();

foreach( var projectType in projectTypes )
{
    ListBoxProjectType.Items.Add(projectType.Title);
}

ListBoxProjectType.EndUpdate();

Try to replace adding individual items to listbox with AddRange:

public void ListBoxProjectTypes()
{
    IEnumerable<ProjectType> projectTypes = projectTypeRepository.ProjectTypes;
    ListBoxProjectType.Items.AddRange(projectTypes.Select(item => (object)item.Title).ToArray());
}

Or simply wrap items adding with ListBoxProjectType.BeginUpdate and ListBoxProjectType.EndUpdate.

Changing my IEnumerable to IList made a difference:

public static class PreLoadedResources
{
    public static IEnumerable<ProjectType> projectTypes;
}

to

public static class PreLoadedResources
{
    public static IList<ProjectType> projectTypes;
}

then in my loading (which takes a 2 second hit), I just .ToList it instead... but now the showdialogue procedure takes split seconds.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!