그래프의 UI를 변경하는 동안 프로그램이 멈추는 문제가 발생하여 스레드로 돌리고 그 동안 프로그램이 돌아가는 걸 알리기 위해 로딩화면을 구현하여 표시하였습니다.
로딩화면도 쓰레드로 돌아가구요. (GIF 이미지 파일을 사용하여 움직이는 로딩화면을 사용하기 때문)
그런데 그래프의 UI를 변경하는 작업을 시작시키면 로딩화면이 멈추고 프로그램이 멈춰있다가 그래프 UI작업이 완료되면 로딩화면이 움직이기 시작합니다.. 우선 해당 부분 소스입니다.
Thread loading;
private void graphAllView_Click(object sender, EventArgs e) // 그래프 값 전체를 다 보이게 함
{
Thread GAV = new Thread(new ThreadStart(GraphAllView));
if (MessageBox.Show("값이 많다면 프로그램이 느려질 수 있습니다. 정말 전체보기를 하시겠습니까?", "알림", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes)
{
GAV.Start();
}
if(GAV.IsAlive == false)
{
pictureBox1.Visible = false;
loading.Abort();
}
}
private void GraphAllView()
{
this.BeginInvoke(
new MethodInvoker(
delegate()
{
loading = new Thread(new ThreadStart(Loading));
loading.Start();
그래프 UI 변경 코드
}));
}
private void Loading()
{
this.BeginInvoke(
new MethodInvoker(
delegate()
{
pictureBox1.Visible = true;
pictureBox1.Image = Image.FromFile("C:\\Users\\sw\\Downloads\\loading_img.gif");
pictureBox1.BackgroundImageLayout = ImageLayout.Stretch;
while (true)
{
Application.DoEvents();
}
}));
}
어떻게 하면 그래프 UI 변경 작업 시작시 로딩화면이 나타나 돌아가는 동안 그래프 UI 변경 작업이 진행되고 완료가 되면 로딩화면이 꺼지게 할 수 있을까요 ?? 제 추측상 원인은 그래프 UI 변경 하는 작업이 무거워서 메인 스레드가 멈추는 거 같습니다. 또 궁금한건 이 현상을 ThreadPool 을 이용하면 해결이 되려나요 ??