programing tip

Windows Form (C #)에서 애니메이션 GIF를 표시하는 방법

itbloger 2020. 6. 26. 18:56
반응형

Windows Form (C #)에서 애니메이션 GIF를 표시하는 방법


상당히 긴 프로세스 실행으로 진행 메시지를 보여주는 양식이 있습니다. 웹 서비스에 대한 호출이므로 진행률 표시 줄에 전체 백분율을 의미있게 표시 할 수는 없습니다. (진행률 표시 줄의 선택 윤곽 속성이 특히 마음에 들지 않습니다)

프로세스에 일부 활동의 느낌을주기 위해 애니메이션 GIF를 표시하고 싶습니다 (예 : Windows 복사 프로세스와 같은 한 컴퓨터에서 다른 컴퓨터로 파일이 날아가는 파일).

어떻게합니까?


너무 어렵지 않습니다.

  1. 양식에 그림 상자를 놓습니다.
  2. 그림 상자에 .gif 파일을 이미지로 추가
  3. 로드 할 때 그림 상자를 표시하십시오.

고려해야 할 사항 :

  • 그림 상자를 비활성화하면 GIF 애니메이션이 표시되지 않습니다.

애니메이션 GIF :

애니메이션 GIF를 찾고 있다면 여기에서 생성 할 수 있습니다.

그것을하는 또 다른 방법 :

내가 잘 작동하는 또 다른 방법은 코드 프로젝트 에서 찾은 비동기 대화 상자 컨트롤입니다.


나는 같은 문제가 있었다. 백그라운드에서 작동하는 긴 작업으로 인해 전체 형식 (gif 포함)이 다시 그려지지 않습니다. 여기에 내가 이것을 해결 한 방법이 있습니다.

  private void MyThreadRoutine()
  {
   this.Invoke(this.ShowProgressGifDelegate);
   //your long running process
   System.Threading.Thread.Sleep(5000);
   this.Invoke(this.HideProgressGifDelegate);
  }

  private void button1_Click(object sender, EventArgs e)
  {
   ThreadStart myThreadStart = new ThreadStart(MyThreadRoutine);
   Thread myThread = new Thread(myThreadStart);
   myThread.Start(); 
  }

이 작업을 담당 할 다른 스레드를 만들었습니다. 이 초기 형식 덕분에 문제없이 계속 다시 그릴 수 있습니다 (gif 작업 포함). ShowProgressGifDelegate 및 HideProgressGifDelegate는 gif가있는 pictureBox의 visible 속성을 true / false로 설정하는 형식의 대리자입니다.


Windows에서는 일반적으로 애니메이션 GIF를 사용하지 않지만 AVI 애니메이션은 거의 사용하지 않습니다. Windows 기본 컨트롤은 표시 할뿐입니다. 애니메이션 GIF를 AVI로 (또는 그 반대로) 변환하는 도구도 있습니다.


PictureBox 컨트롤에 넣으면 작동합니다.


동일한 스레드에 있기 때문에 모든 것이 중지되기 때문에 긴 작업을 시작하지 않아도됩니다.


나는 같은 문제가 있었고 여러 가지 다른 문제에 직면했던 것을 구현함으로써 다른 솔루션을 발견했습니다. 마지막으로, 아래는 다른 게시물의 일부 조각을 모아서 예상대로 작동했습니다.

private void btnCompare_Click(object sender, EventArgs e)
{
    ThreadStart threadStart = new ThreadStart(Execution);
    Thread thread = new Thread(threadStart);
    thread.SetApartmentState(ApartmentState.STA);
    thread.Start();
}

PictureBox 컨트롤을 호출하는 Execution 메서드는 다음과 같습니다.

private void Execution()
{
    btnCompare.Invoke((MethodInvoker)delegate { pictureBox1.Visible = true; });
    Application.DoEvents();

    // Your main code comes here . . .

    btnCompare.Invoke((MethodInvoker)delegate { pictureBox1.Visible = false; });
}

PictureBox는 속성 창에서 보이지 않거나 아래에서 수행하십시오.

private void ComparerForm_Load(object sender, EventArgs e)
{
    pictureBox1.Visible = false;
}

참고 URL : https://stackoverflow.com/questions/165735/how-do-you-show-animated-gifs-on-a-windows-form-c

반응형