나는 데이터베이스 쿼리, 데이터 그리드 커스터마이징 및 많은 데이터로드로 인해 첫 번째 창을로드하는 데 3-5 초가 걸리는 이전 winforms 애플리케이션을 유지 관리 중입니다.표시 할 때까지 백그라운드에서 창로드하기
사용자는이 이전 창과 아직 구현되지 않은 새 기능을 선택할 수있는 프런트 화면을 추가해야합니다.
가 이그래서, DB 쿼리 및 기타 이전 코드의 일부를 리팩토링 외에, 나는이 수행하여이 윈도우의 로딩 시간을 향상시키고 자 :
- 사용하면 앞 화면을 입력
- 느린에게 로드 윈도우는 현재와 마찬가지로 로딩을 시작하지만 프론트 스크린 윈도우가 활성화되어있는 동안 다른 스레드의 백그라운드에서 숨겨집니다. 사용자가 실제로 버튼을 클릭하여 윈도우를 열기 전에 윈도우가 완전히로드 된 경우에는 여전히 숨겨져 있어야합니다.
- 사용자가 단추를 클릭하여 창을 열면 이미로드되어 준비가되었으므로 즉시 표시됩니다.
이 내가 가진 것입니다 : 내가 위에서 설명한 두 개의 창 (전면 스크린과 느린 로딩)은 별도의 프로젝트에 있기 때문에) (Application.Run을 사용하고
private void startBackgroundLoading()
{
var myThread = new Thread(openSlowLoadingWindow);
myThread.SetApartmentState(ApartmentState.STA);
myThread.Start();
}
private void openSlowLoadingWindow()
{
System.Windowns.Forms.Application.Run(new SlowWindow());
}
.
분명히 위의 코드는 새로운 스레드를 시작하고로드가 완료되면 나에게 윈도우를 보여줄 것입니다. 그러나 위에서 설명한 것처럼 실제로 표시해야 할 때가 있습니다.
백그라운드에서 새 스레드를 실행하고 창과 다양한 다른 것들을 숨기려면 여러 가지 방법을 시도했습니다.
프로그래밍에 익숙하지 않아 완전히 잘못된 각도에서 공격하는 경우 개선 방법을 알려 주시기 바랍니다.
.net 4.0에 바인딩되었으므로 새 비동기/대기중인 항목이 옵션이 아닙니다.
안부, 에릭
정상적인 방법으로 작동한다고 표시하는 것이 좋을까요? SlowWindow win = 새로운 SlowWindow(), 실제로 표시하고자 할 때마다 SlowWindow.Show()를 호출하십시오. –
생성자 또는 window_loaded 이벤트에 느린 로딩 코드가 있습니까? –
물론 이것은 아무 것도 해결하지 못합니다.로드하는 것과 마찬가지로 느립니다. 임의로 * 처음 * 창을 표시하고 * 작업자 스레드에서 쿼리를 실행할 수 있습니다. 그렇게해도 더 빨리 진행되지는 않지만 더 좋아 보이지만 사용하기가 어렵습니다. 더 나은 UI를 만들어 문제를 해결하십시오. 사람이 쿼리 실행 시간의 몇 초 분량을 생성 할 수있는 데이터 양을 뚫고 나가는 시나리오는 없습니다. –