응용 프로그램 시작시 채워야하는 Janus 표 컨트롤이 여러 개 있습니다.WinForms Control.BeginInvoke 비동기 콜백
시작 시간과 이러한 그리드를 새로 고치는 데 걸리는 시간을 단축하기 위해이 그리드를 다른 스레드에로드하고 싶습니다. 각 그리드는 별도의 탭에 있습니다. 이상적으로는 각 그리드에서 Control.BeginInvoke를 사용하고 그리드로드에서 탭을 완료하면 사용 가능하게됩니다.
BeginInvoke를 사용할 때 대리자를 사용하면 비동기 콜백을 수행 할 수 있으므로 비동기 콜백의 탭을 활성화 할 수 있지만 Control.BeginInvoke를 사용할 때는 불가능합니다. Control.BeginInvoke 또는 더 나은 솔루션을 사용하여 비동기 콜백을 수행하는 방법이 있습니까?
지금까지 내가 가진 :
이public delegate void BindDelegate(IMyGrid grid);
private IAsyncResult InvokeBind(IMyGrid grid)
{
return ((Control)grid).BeginInvoke(
new BindDelegate(DoBind), new object[] { grid }
);
}
private void DoBind(IMyGrid grid)
{
grid.Bind(); // Expensive operation
}
private void RefreshComplete()
{
IAsyncResult grid1Asynch = InvokeBind(grid1);
IAsyncResult grid2Asynch = InvokeBind(grid2);
IAsyncResult grid3Asynch = InvokeBind(grid2);
IAsyncResult grid4Asynch = InvokeBind(grid3);
IAsyncResult grid5Asynch = InvokeBind(grid4);
IAsyncResult grid6Asynch = InvokeBind(grid5);
}
지금은 별도의 스레드를 분사하고 IAsynchResults가 완료에 따라 하나의 내가있는 탭 컨트롤을 다시 활성화 할 수 완료했는지 확인하기 위해 계속 확인 할 수있는 그리드가 포함되어 있습니다.이 작업을 수행하는 더 좋은 방법이 있습니까?
채우기 전후에 'SuspendLayout()'및 'ResumeLayout (false)'를 사용하면 그리드가 즉각적인 상태로 그려지지 않을 수도 있습니다. – Oliver