C#에서 실시간 그래프를 그리다 보면 그리기 화면이 깜빡이는 현상을 볼수 있다.

이 문제를 해결하기 위해서는 그리기 할 대상을 double buffering 처리를 해 주면 깔끔하게 해결이 된다.

보통은 System.Windows.Forms::Panel위에 그리기 작업을 하게 될텐데, 혹은 Bitmap에 먼저 그린 후 그 Bitmap을 Panle에 그리는 방식이거나...

아무튼 이 경우 Panel을 double buffering 처리를 해 주면 된다.

문제는 Form은 화면 디자인 시점에 DoubleBuffered라는 속성 값을 true로 해 주면 되지만 Panel의 경우는 double buffering을 설정하는 메소드나 속성(property)이 막바로 접근이 안된다.

즉 protected 메소드이고 protected 속성이다. 


MSDN을 보면 속성의 정의가 아래와 같이 protected이고

protected virtual bool DoubleBuffered { get; set; }


메소드도 아래와 같이 protected이다.

protected virtual bool DoubleBuffered { get; set; }


따라서 Panel에 double buffering을 설정할려면 Panel을 상속받은 사용자 정의 클래스를 만들어서 이 사용자 정의 Panel을 사용해야 가능하다.


(1) Visual Studio의 해당 프로젝트명에서 마우스 우측 클릭 ⇒ 추가(Add) ⇒ New Item(새 항목) ⇒ Class를 선택 후 Class 이름 지정


(2) 아래의 내용을 추가한다.

    class DoubleBufferPanel : Panel

    {

        public DoubleBufferPanel()

        {

            this.SetStyle(ControlStyles.OptimizedDoubleBuffer | 

   ControlStyles.UserPaint |

                                ControlStyles.AllPaintingInWmPaint, true

                );


            this.UpdateStyles();

        } 

    }


(3) Form1.Designer.cs에서 기존의 Panel을 사용자가 정의한 Panel로 변경한다.




위의 적색 사각형 영역 (Windows Form Designer generated code 영역)을 더블 클릭하여 InitializeComponent() 안에 있는


this.panel1 = new System.Windows.Forms.Panel();

this.panel1 = new Bitmap_Panel.DoubleBufferPanel();

와 같이 사용자 정의 Panel로 변경해 준다.


이후 부터 화면이 깜빡이는 현상 없이 잘 처리 될 것이다.


MSDN이 소개하는 DoubleBuffered에 대한 설명이다.


Gets or sets a value indicating whether this control should redraw its surface using a secondary buffer to reduce or prevent flicker.





Visual Studio 2015 Community 버전 사용시 종종 보여지는 문제 중 하나가 새로운 Project를 열때(File - 새로 만들기 - 프로젝트) 

아래와 같은 템플릿이 보여야 되는데 대부분이 보이지 않고 Silverlight나 WPF 정도만 보이는 경우가 있다.

혹은 ASP.NET 웹 응용 프로그램 템플릿이 보이지 않는다거나...




정작 Windows Forms 응용 프로그램을 개발할 템플릿이 없어 난감한 경우를 만난다.

이 문제에 대해 Stack Overflow 등 여러 해법이 있어나 잘 작동 안되는 경우들이 있다.


가장 손쉬운 해법은


 ① Visual Studio 2015가 설치된 다음 폴더(<설치폴더>\Common7\IDE)로 이동한다. 만일 아래 경로에 설치되어 있다면 

     C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE

 ② 위의 폴더에서 projecttemplatecache와 itemtemplatecache 폴더 2개를 삭제한다. 이 2개의 캐시 폴더를 삭제하지 않고서는 devenv /installvstemplates 명령어가 효과가 없다.


 ③ 위의 폴더에서 커맨더 창(DOS 창)을 띄워 다음 명령어를 차례로 실행한다.

     devenv /installvstemplates.

     devenv /ResetSettings.


또 하나의 해법은 다시 설치를 통해 "수정(Modify)"을 선택하여 진행하다 보면 원하는 기능이 체크 해제 되어 있는 것을 발견하게 될 것이다.

이를 체크해서 다시 설치를 함을 통해 문제를 해결할수도 있다.


이 문제에 대해 아래 사이트 참조.


https://social.msdn.microsoft.com/Forums/vstudio/en-US/0dd15332-7744-44ea-85a8-5ec6b36febcc/visual-studio-2015-missing-project-templates?forum=visualstudiogeneral


http://stackoverflow.com/questions/32613505/missing-mvc-template-in-visual-studio-2015




프로그래밍을 공부하고 개발을 하다보면 질문을 할 일들이 있게 되는데 

이런 경우 커뮤니티 사이트가 도움이 된다.


아래는 C#을 공부하면서 방문해 볼 만한 커뮤니티 사이트이다.


http://www.hoons.net/






+ Recent posts