Windows 양식 (C#)에 애니메이션 GIF를 어떻게 표시합니까?
-
03-07-2019 - |
문제
진행 메시지를 상당히 긴 프로세스 실행으로 보여주는 양식이 있습니다. 웹 서비스에 대한 호출이므로 진도 막대에서 의미있는 백분율을 표시 할 수는 없습니다. (나는 특히 진행률 바의 천막 속성을 좋아하지 않는다)
프로세스에 일부 활동의 느낌을 제공하기 위해 애니메이션 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;
}