히포차트4/개발 강좌

히포차트로 대용량 데이터를 비동기 방식으로 그려보자

리바이 병장 2013. 5. 21. 19:28

처리해야할 데이터 수가 몇십만개 이상일 경우 폼이 뜨지 않거나 느려지는 경우가 있습니다. 


이럴 경우 프로그레스 바 등을 이용하여 비동기로 처리하면 폼이 안뜨는 현상을 방지하고 백그라운드에서 오래걸리는 작업을 수행할 수 있습니다. 

시리즈리스트와 시리즈 선언 위치, 백그라운드워커 컨트롤에서 제공하는 각 이벤트에 히포차트 코드를 어떻게 배치하는지 보시면 되겠습니다. 

아래 코드 참고하시기 바랍니다. 


public partial class Form1 : Form
    {
        SeriesList sList = new SeriesList ();
        Series sr = new Series();

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load( object sender, EventArgs e)
        {
            this.progressBar1 .Maximum = 100000;

            sList .ChartType = ChartType.Line;

            backgroundWorker1 .RunWorkerAsync();
        }

        private void backgroundWorker1_DoWork( object sender, DoWorkEventArgs e)
        {
            Random r = new Random();
            for ( int x = 0; x < 100000 ; x++)
            {
                SeriesItem item = new SeriesItem ();
                item .Name = x .ToString();
                item .YValue = r .Next( 90);
                sr .items .Add(item);

                backgroundWorker1 .ReportProgress( 1); // 계산된 값으로 수정
            }
        }

        private void backgroundWorker1_ProgressChanged( object sender, ProgressChangedEventArgs e)
        {
            this.progressBar1 .Value = e .ProgressPercentage;
        }

        private void backgroundWorker1_RunWorkerCompleted( object sender, RunWorkerCompletedEventArgs e)
        {
            // 에러가 있는지 체크
            if (e .Error != null)
            {
                MessageBox.Show(e .Error .Message);
                return;
            }

            sList .SeriesCollection .Add(sr);
            this.hHippoChart1 .SeriesListDictionary .Add(sList);
            this.hHippoChart1 .DrawChart();

            MessageBox.Show("completed");
        }
    }

사업자 정보 표시펼치기/접기
히포차트 | 하영대 | 경기도 성남시 수정구 복정동 631-5 401 | 사업자 등록번호 : 129-34-55719 | TEL : 031-751-6673 | Mail : hippochart@gmail.com | 통신판매신고번호 : 제 2010-경기성남-1203호 | 사이버몰의 이용약관 바로가기