문제

진행 메시지를 상당히 긴 프로세스 실행으로 보여주는 양식이 있습니다. 웹 서비스에 대한 호출이므로 진도 막대에서 의미있는 백분율을 표시 할 수는 없습니다. (나는 특히 진행률 바의 천막 속성을 좋아하지 않는다)

프로세스에 일부 활동의 느낌을 제공하기 위해 애니메이션 GIF를 보여주고 싶습니다 (예 : 한 컴퓨터에서 다른 컴퓨터로 날아가는 파일).

이 작업을 어떻게합니까?

도움이 되었습니까?

해결책

너무 어렵지 않습니다.

  1. 사진 상자를 양식에 떨어 뜨립니다.
  2. 그림 박스의 이미지로 .gif 파일을 추가
  3. 로드 할 때 그림 상자를 보여줍니다.

고려해야 할 사항 :

  • PictureBox를 비활성화하면 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가 true/false를 갖는 그림 박스의 가시적 특성을 설정하는 형태의 대표입니다.

Windows에서는 전통적으로 애니메이션 GIF를 사용하지 않지만 AVI 애니메이션은 거의 없습니다. 애니메이션 GIF를 AVI로 변환하는 도구도 있습니다.

그림 박스 컨트롤에 넣으면 작동해야합니다.

당신이 같은 스레드에 있기 때문에 모든 것이 멈추기 때문에 긴 작동을 시작할 때는 아닙니다.

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

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 컨트롤을 호출하는 실행 방법입니다.

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;
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top