SandCastle 이란 놈을 이용하면 XML을 이용해서 문서를 작성 할 수가 있다.

SandCastle 설치 폴더에 Examples\generic아래에 Gui에 해당하는 실행 프로그램을 실행한 후

각 해당하는 항목에 Add 해 주면 된다.

-. Assembly And Comment Files


Assemblies :
작성할 대상의 DLL 설정한다. 개의 DLL 또는 다수의 DLL, 폴더를 통째로 지정할 있다.

 

Comments : DLL 생성시 같이 생성되는 XML 코멘트 파일을 설정한다.

Comments파일을 지정하지 않더라도 Help File 생성할 있지만 경우 Syntax 외에 중요한 정보들은 Help File 나타나지 않는다.

                   

Dependent Assemblies : 해당 DLL에서 참조하는 DLL들을 지정한다. 참조하는 DLL 지정하지 않을 경우 Help File 생성되지 않는다.

 

-. Options

Name : Sandcastle 프로젝트 명이자, 출력될 폴더 명이 된다.

 

Presentation Style : Help File 출력 타입을 설정한다.

 

Language ID : 생성될 Help File 언어를 설정, 한국어는 1042

 

Default Targets : 출력할  대상 설정

-. Log : Build버튼을 눌러 실행하면 모든 로그가 항목에 나타난다.

          Build 실패할 경우 로그를 통해 원인을 있다.


Build
완료되면 지정된 폴더에 Name항목에 설정한 폴더가 생성된다.

기본적으로 생성물은 C:\Program Files\Sandcastle\Examples 폴더아래에 Name 설정한 폴더명으로 생성이 되며, generic.targets파일의 BuildDir 항목을 수정하여 변경할 있다.

 

기본적으로 Sandcastle 사용되는 모든 파일을 복사하여 사용하고, 원본 파일은 사용하지 않는다.

comments : 화면에서 지정한 코멘트파일(XML) 폴더에 자동 복사되어 진다.

 

dll : Assemblies 에서 지정한 DLL Dependent Assemblies 지정한 참조 파일들이

폴더에 자동으로 복사되어진다.

 

hana, vs2005, prototype : Presentation Style에서 지정한 Style 폴더가 생성되고

최종 결과물(.chm파일) 폴더 하위의 chm 폴더에 생성된다.

SandCastle 파일은 아래 주소에 가면 받을 수 있다.

http://www.codeplex.com/Sandcastle/Release/ProjectReleases.aspx?ReleaseId=13873

[C#] 윈도우 좌표~ C# 2009. 1. 19. 17:44
            Rectangle screenRect = Screen.PrimaryScreen.WorkingArea;
            Rectangle tempRect = new Rectangle(screenRect.Right - 890, -8, 500, 0);
            this.DesktopBounds = tempRect;

-_-ㅋ 말 그대로 좌표를 가지고 온답;;;
[C#]Tray Icon C# 2009. 1. 16. 15:43

Tray Icon..

-_-a 뭐 기본적으로 그런 내용이다;;

언젠가 쉽게 쓸 일이 있겠지 ㅋㅋ

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            e.Cancel = true;//이벤트 취소
            this.WindowState = FormWindowState.Minimized;//폼 최소화
            this.ShowInTaskbar = false;//작업표시줄 표시 금지
        }

        private void Tray_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            this.Visible = true;
            this.ShowInTaskbar = true;    // 현재 프로그램을 테스크 바에 표시하게 한다.   
            this.WindowState = FormWindowState.Normal; // 폼을 윈도 상태를 normal
            Tray.Visible = false; // 트레이의 아이콘을 보이지 않게 한다. 
        }

아 -_- contextmenu 넣어줄라면?
this.tray.contextmenu=this.contextmenu(생성한것) 해주기!

[C#]volatile C# 2009. 1. 15. 10:38

volatile 키워드는 동시에 실행 중인 여러 스레드에 의해 필드가 수정될 수 있음을 나타냅니다. volatile로 선언된 필드에는 단일 스레드를 통한 액세스를 전제로 하는 컴파일러 최적화가 적용되지 않습니다. 이렇게 하면 필드의 값을 항상 최신 상태로 유지할 수 있습니다.

일반적으로 volatile 한정자는 액세스를 serialize할 때 lock 문을 사용하지 않고 여러 스레드에서 액세스하는 필드에 사용됩니다. 

volatile 키워드는 다음과 같은 형식의 필드에 적용할 수 있습니다.

  • 참조 형식

  • 안전하지 않은 컨텍스트의 포인터 형식. 포인터 자체는 volatile일 수 있지만 포인터가 가리키는 개체는 volatile일 수 없습니다. 즉, "volatile 개체에 대한 포인터"를 선언할 수 없습니다.

  • sbyte, byte, short, ushort, int, uint, char, float 및 bool 같은 정수 계열 형식

  • 정수 계열 형식을 기반으로 한 열거형

  • 참조 형식으로 알려진 제네릭 형식 매개 변수

  • IntPtrUIntPtr

volatile 키워드는 클래스 또는 구조체의 필드에만 적용할 수 있습니다. 지역 변수는 volatile로 선언할 수 없습니다. 

[예제]

// csharp_volatile.cs

// Compile with: /target:library

class Test

{

   public volatile int i;


   Test(int _i)

   {

      i = _i;

   }

}


출처 : MSDN

[C#]스레드 C# 2009. 1. 14. 10:47
스레드 생성에는 Thread,ThreadPool,Timer Class를 이용한 세가지 방법이 존재한다.

여기서 Thread Class를 이용한 스레드는 과도한 문맥전환의 문제가 있을 수 있다.

이에 ThreadPool Class는 Pool을 구성하고 적정량의 스레드를 수용함으로

Thread Class를 이용한 것보다 좀 더 안정적이다.

Timer Class의 경우는 일정 시간마다 스레드를 자동으로 활성화 해 준다.

1.Thread Class

Thread th = new Thread(new ThreadStart(대상));

2. ThreadPool Class

ThreadPool.QueueUserWorkItem(new WaitCallBack(대상,null);

3. Timer Class

Timer timer = new Timer(new TimerCallBack(대상),null,시간,100);
[C#]BackgroundWorker. C# 2009. 1. 12. 14:20
private BackgroundWorker myWorker = new BackgroundWorker();

myWorker.DoWork += new DoWorkEventHandler(myWorker_DoWork);
myWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(myWorker_RunWorkerCompleted);
myWorker.RunWorkerAsync() ;

먼저 BackgroundWorker는 다른 영역의 쓰레드를 실행 시키게 해 준다.

즉 메인 영역의 쓰레드가 아닌 별개의 영역을 말한다.

여기서 생성된 쓰레드는 DoWork 이벤트 핸들러에 의해서 작업이 수행된다.

만약 DoWork의 작업이 완료되거나 취소될 경우는 그 다음 RunWorkerCompletedEventHandler가 실행되어 쓰레드의 종료 또는 취소 후의 처리를 해 준다.

myWorker.RunWorkerAsync() 는 다른 영역에서 쓰레드가 실행되게 해 준다는 뜻이다.

http://www.synch3d.com/wiki/moin/moin.cgi/Effective_20C_23


찬찬~ 히 보면 많은 도움이 된다지요~

-_-/ 꼭 인터넷이 되는데만 보세요 ㅎㅎ
[C#]DoubleBuffered -_-a C# 2009. 1. 9. 14:23
화면상에 드로잉이 일어날때 깜박임을 제거해 주는 우리의 더블버퍼~

-_-a 이를 쓰는 방법은..

this.DoubleBuffered=true;

요렇게~ 해 주면 된다.

근데 한가지 문제!! -_- 부하가 많이 갈 경우?

-_-... 짤 없이 직접 처리해야한답 -_-
트레이 아이콘이 닷넷 2.0 버전의 경우 OS를 종료 시키면 종료가 되질 않는다.

3.0에서도 실제 해 본 것은 아니지만 여기에 대한 문제점 해결을 찾다보니

몇몇 방법이 있다는 것을 알았다.

1. Flag 변수 - 시스템 종료인지 단순한 창의 종료인지 구분

2. WndProc()함수 overriding

3. Form_Closing()함수 수정

 이벤트 순서 : WM_QUERYENDSESSION - Form Close - WM_ENDSESSION

  

public static bool bEndSession = false; 
/*logoff, shutdown, restart, poweroff */

protected override void WndProc(ref Message m)
{
      const int WM_QUERYENDSESSION = 0x0011;              
      const int WM_ENDSESSION = 0x16;
      const int WM_SYSCOMMAND = 0x112;
      const int WM_CLOSE = 0x0010;
      const int SC_CLOSE = 0xF060;
           switch (m.Msg){
                case WM_QUERYENDSESSION:
                Console.WriteLine("WM_QUERYENDSESSION");
                bEndSession = true;
                break;

               case WM_ENDSESSION:
               Console.WriteLine("WM_ENDSESSION");
               break;

               case WM_SYSCOMMAND:
                    if (m.WParam.ToInt32() == SC_CLOSE)
                    {
                        Console.WriteLine("SC_CLOSE");
                    }
                    break; 

                case WM_CLOSE:
                    Console.WriteLine("WM_CLOSE");
                    break;
           }
           base.WndProc (ref m);
        }

 

private void MainForm1_Closing(object sender, System.ComponentModel.CancelEventArgs e){
            if (!bEndSession){

                e.Cancel = true;
                this.WindowState = FormWindowState.Minimized;
                this.Hide();
            }
            else{
                    //WndProc()에서 처리하도록 함.
            }

}

[C#]API 사이트 C# 2008. 12. 26. 14:49
http://www.pinvoke.net/

P-INVOKE -_- 이놈 땜시 고생했던 기억이 생각난다..

저기 가면 API가 많다는.. 모두 즐거운 프로그래밍!!