Windows Forms 프로그램이 "처리 중"일 때 ajaxStart/ajaxStop과 유사한 스피너를 표시합니까?
네네.나는 그것들이 완전히 다른 두 가지 기술이라는 것을 안다.최근 웹 개발에서 C#과 Windows Forms를 사용한 FAT 개발로 넘어갔습니다.저는 항상 ajax Start와 ajax Stop을 사용하여 스피너를 표시하는 것이 매우 쉽다고 생각했기 때문에 사용자는 뭔가 일어나고 있음을 알고 대기하고 있습니다.
C# Windows Forms에 대해 글로벌하게 구현할 수 있는 동등한 간단한 기술이 있습니까?예를 들어 DB를 쿼리하고 결과를 기다리는 경우 보통 몇 초 동안 프로그램이 응답하지 않게 되었다가 "처리" 후 다시 작동하기 시작합니다.프로그램이 "처리 중"일 때 프로그램이 응답하지 않고 새 스레드를 찢는 원인이 될 수 있는 모든 포인트를 특정하지 않고 스피너를 표시할 수 있는 글로벌 방법이 있습니까?
제가 불명확한 점이 있으면 알려주세요.
Forms 은 Windows Forms입니다.Cursor.Current = Cursors.WaitCursor;.
그게 당신에게 효과가 있나요, 아니면 꼭 이미지여야 하나요?
저는 Visual Studio Enterprise 2015를 사용하고 있습니다.여기에 제시된 권장 커서 스타일/유형은 모두 나와 함께 작동되지 않았습니다.
저와 함께 일하는 사람은 다음과 같습니다.
private async void button_Click(object sender, RoutedEventArgs e)
{
Cursor = Cursors.WaitCursor; // change cursor to hourglass type
ThatProcessThatTookVeryLongTime();
Cursor = Cursors.Arrow; // change cursor to normal type
}
이것이 내가 대기 커서가 필요할 때 사용하고 싶은 방법이다; try-finally 코드를 쓰는 대신.
#region WaitCursor
public static IDisposable BeginWaitCursorBlock()
{
return ((!_waitCursorIsActive) ? (IDisposable)new waitCursor() : null);
}
private static bool _waitCursorIsActive;
private class waitCursor : IDisposable
{
private Cursor oldCur;
public waitCursor()
{
_waitCursorIsActive = true;
oldCur = Cursor.Current;
Cursor.Current = Cursors.WaitCursor;
}
public void Dispose()
{
Cursor.Current = oldCur;
_waitCursorIsActive = false;
}
}
#endregion
사용 예:
using (BeginWaitCursorBlock())
{
...
}
이 Code Project 링크를 추가할 수 있습니까?
빌드하고 툴바에서 드래그하여 사용하기만 하면 됩니다.LoadingCircle이치노마법처럼 기능하고 커스터마이즈도 가능!
프로그램이 응답하지 않는 경우 UI 스레드에서 실제 작업을 수행하고 있기 때문입니다.작업을 백그라운드 스레드로 이동하고 필요에 따라 UI 인터랙션을 비활성화하여 사용자가 작업 중에 무언가를 만지지 못하도록 한 다음 백그라운드 작업이 완료되면 Control을 사용하여 결과를 UI 스레드로 전송합니다.호출한 다음 UI를 결과로 업데이트한 다음 모든 항목을 다시 활성화합니다.
스피너를 구현하기 위해 스피너 gif가 들어간 Picture Box를 사용하고 있습니다.UI가 유휴 상태일 때는 사용하지 않도록 설정하고 백그라운드 워커를 시작할 때는 사용하도록 설정합니다.
또 다른 방법은 마우스 커서를 '대기' 커서로 바꾸는 것인데, 저는 별로 좋아하지 않습니다.
처리 전 : 커서.전류 = 커서.Wait Cursor;
과정뭔가();
처리 후 : 커서.전류 = 커서.앱의 기동
.NET 4.5(VS 2015+) 이후에서는 비동기 조합을 사용하여 UI 스레드에 업데이트를 전송하기 위해 Progress를 사용하여 대기할 수 있습니다.
네, 있습니다.
간단하게는, 「로드」인디케이터를 유효하게 하는 방법과 그 로드 상태를 무효로 하는 방법의 2개를 작성할 수 있습니다.
모든 초기 Ajax 콜(또는 기타 긴 콜)에 대해 enable 메서드를 자동으로 호출합니다.
온컴플리트콜백이 실행되면 즉시 온컴플리트콜백에서 디세이블 메서드를 호출합니다.
또 다른 방법은 애니메이션을 실행하는 동안 백그라운드 워커 또는 스레드가 작업을 수행하거나 커서를 기다리거나 폼/메인 스레드에 로더 GIF를 표시하는 것입니다.
언급URL : https://stackoverflow.com/questions/9007152/showing-a-spinner-while-a-windows-forms-program-is-processing-similar-to-ajax
'programing' 카테고리의 다른 글
| Unity에서의 Json 및 Json 어레이의 시리얼화 및 시리얼화 해제 (0) | 2023.03.26 |
|---|---|
| Woocommerce: 카트에 추가된 후 사용자 지정 jquery 이벤트 (0) | 2023.03.26 |
| 여러 라우터를 반응으로 처리하는 방법 (0) | 2023.03.26 |
| JSON 개체의 JavaScript 재귀 검색 (0) | 2023.03.26 |
| 각도가 있는 이미지 가져오기 요청JS (0) | 2023.03.26 |