C# 쓰레드에서 UI 속성 변경하기...

아래의 코드는 C# 쓰레드 상에서 UI 콘트롤의 속성을 변경할 때 cross thread 오류를 방지하는 코드의 예이다.

        private delegate void ChangeProgressValueDelegate(Int32 val);


        private void ChangeProgressValue(Int32 val)
        {
            pbBurning.Value = val;
        }


        private void DoProgressThread(Object stateInfo)
        {
            Int32 i = 1;
            while (true)
            {
                if (pbBurning.ProgressBar.InvokeRequired)
                {
                    pbBurning.ProgressBar.Invoke(new ChangeProgressValueDelegate(ChangeProgressValue), i++);
                }
                else
                {
                    pbBurning.Value = i++;
                }
                Application.DoEvents();


                if (pbBurning.Value == pbBurning.Maximum)
                {
                    i = 1;
                }


                if (m_makeZipDone)
                {
                    if (pbBurning.ProgressBar.InvokeRequired)
                    {
                        pbBurning.ProgressBar.Invoke(new ChangeProgressValueDelegate(ChangeProgressValue), pbBurning.Maximum);
                    }
                    else
                    {
                        pbBurning.Value = pbBurning.Maximum;
                    }


                    Thread.Sleep(50);


                    if (pbBurning.ProgressBar.InvokeRequired)
                    {
                        pbBurning.ProgressBar.Invoke(new ChangeProgressValueDelegate(ChangeProgressValue), pbBurning.Minimum);
                    }
                    else
                    {
                        pbBurning.Value = pbBurning.Minimum;
                    }


                    break;
                }


                Thread.Sleep(50);
            }


            m_progressDone = true;


            m_autoEvent.Set();
        }

댓글

이 블로그의 인기 게시물

Publish to my blog (weekly)

Publish to my blog (weekly)