검색결과 리스트
c#에 해당되는 글 43건
- 2009.01.29 [ETC]SandCastle 사용(Help Document)
- 2009.01.19 [C#] 윈도우 좌표~
- 2009.01.16 [C#]Tray Icon
- 2009.01.15 [C#]volatile
- 2009.01.14 [C#]스레드
- 2009.01.12 [C#]BackgroundWorker.
- 2009.01.09 [C#]Effective C# 인터넷이 되는데만 -_- 됩네다
- 2009.01.09 [C#]DoubleBuffered -_-a
- 2009.01.06 [C#]트레이 아이콘 버그.(OS 종료시)
- 2008.12.26 [C#]API 사이트
글
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가 실패할 경우 로그를 통해 그 원인을 알 수 있다. 기본적으로 생성물은 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 폴더에 생성된다. http://www.codeplex.com/Sandcastle/Release/ProjectReleases.aspx?ReleaseId=13873
Build가 완료되면 지정된 폴더에 Name항목에 설정한 폴더가 생성된다.
SandCastle 파일은 아래 주소에 가면 받을 수 있다.
설정
트랙백
댓글
글
Rectangle tempRect = new Rectangle(screenRect.Right - 890, -8, 500, 0);
this.DesktopBounds = tempRect;
-_-ㅋ 말 그대로 좌표를 가지고 온답;;;
설정
트랙백
댓글
글
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(생성한것) 해주기!
설정
트랙백
댓글
글
volatile 키워드는 동시에 실행 중인 여러 스레드에 의해 필드가 수정될 수 있음을 나타냅니다. volatile로 선언된 필드에는 단일 스레드를 통한 액세스를 전제로 하는 컴파일러 최적화가 적용되지 않습니다. 이렇게 하면 필드의 값을 항상 최신 상태로 유지할 수 있습니다.
일반적으로 volatile 한정자는 액세스를 serialize할 때 lock 문을 사용하지 않고 여러 스레드에서 액세스하는 필드에 사용됩니다.
volatile 키워드는 다음과 같은 형식의 필드에 적용할 수 있습니다.
-
참조 형식
-
안전하지 않은 컨텍스트의 포인터 형식. 포인터 자체는 volatile일 수 있지만 포인터가 가리키는 개체는 volatile일 수 없습니다. 즉, "volatile 개체에 대한 포인터"를 선언할 수 없습니다.
-
sbyte, byte, short, ushort, int, uint, char, float 및 bool 같은 정수 계열 형식
-
정수 계열 형식을 기반으로 한 열거형
-
참조 형식으로 알려진 제네릭 형식 매개 변수
volatile 키워드는 클래스 또는 구조체의 필드에만 적용할 수 있습니다. 지역 변수는 volatile로 선언할 수 없습니다.
[예제]
// csharp_volatile.cs
// Compile with: /target:library
class Test
{
public volatile int i;
Test(int _i)
{
i = _i;
}
}
출처 : MSDN
설정
트랙백
댓글
글
여기서 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);
설정
트랙백
댓글
글
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
찬찬~ 히 보면 많은 도움이 된다지요~
-_-/ 꼭 인터넷이 되는데만 보세요 ㅎㅎ
설정
트랙백
댓글
글
-_-a 이를 쓰는 방법은..
this.DoubleBuffered=true;
요렇게~ 해 주면 된다.
근데 한가지 문제!! -_- 부하가 많이 갈 경우?
-_-... 짤 없이 직접 처리해야한답 -_-
설정
트랙백
댓글
글
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()에서 처리하도록 함.
}
}
RECENT COMMENT