C#
- Delegate (델리게이트) 사용법 및 예시 2019.08.27
- 컴퓨터 화면 실시간 스트리밍 프로그램 만들기 #1 2019.08.03 1
- 외부 FONT 프로젝트에 적용하기 2019.04.06
- 폴더 디렉터리 목록 불러오기 및 수정,삭제,저장 2019.03.25
Delegate (델리게이트) 사용법 및 예시
1.
이벤트 핸들링을 위해서 사용, 쉽게말해서 피동적인 액션을 취할때 사용한다
누군가가 나를 호출하므로서 내가 호출당하기 위해 사건에 개입하는 일이 없게된다
즉, 사건과 그로인한 행위를 분리할 수 있다
2.
C++에서 이 이벤트핸들링을 위해서 사용하던 함수포인터라는 개념을 더더욱 쓰기좋게 만들어둔 형태
3.
C# delegate는 C/C++의 함수 포인터와 비슷한 개념으로 메서드 파라미터와 리턴 타입에 대한 정의를 한 후, 동일한 파라미터와 리턴 타입을 가진 메서드를 서로 호환해서 불러 쓸 수 있는 기능이다.
예를 들면, 아래 RunDelegate 델리게이트는 입력 파라미터가 int 하나이고 리턴 값이 없는 메서드를 가리킨다. RunThis() 메서드와 RunThat()메서드는 모두 int 파라미터 하나에 리턴 값이 없는 메서드이므로, RunDelegate의 함수 형식(prototype)과 맞으므로 이 delegate를 사용할 수 있다.
예시.
버튼을 누르면 월드내 생성되는 오브젝트 전체가 죽는다고 가정했을 때
이벤트핸들링 없이 처리하면, 버튼이 눌렸을 시점을 IF문 등으로 체크하여
모든 오브젝트를 돌며 죽는 처리를 해야함.
foreach(WorldInObject obj in ..)
obj.die();
그러나 델리게이트를 사용하면, 이것에 대한 코드를 안짜도 된다.
모든 오브젝트의 어미에 미리 void OnButtonPressed(){ this.die(); } 를 선언하고 관장하는쪽에 등록 해두기만하면 전혀 호출할 필요가 없다.
왜냐하면, 버튼이 눌렸을 경우 버튼을 관장하는 매니저에서 OnButtonPressed를 자동으로 호출할 것이기 때문이다.
출처 : http://devkorea.co.kr/bbs/board.php?bo_table=m03_qna&wr_id=36068
'C#' 카테고리의 다른 글
컴퓨터 화면 실시간 스트리밍 프로그램 만들기 #1 (1) | 2019.08.03 |
---|---|
외부 FONT 프로젝트에 적용하기 (0) | 2019.04.06 |
폴더 디렉터리 목록 불러오기 및 수정,삭제,저장 (0) | 2019.03.25 |
컴퓨터 화면 실시간 스트리밍 프로그램 만들기 #1
원리는 간단하다.
1. 0.1초마다 사진을 찍듯 캡쳐를 한다.
2. WinForm의 Picture box에 띄워준다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Imaging;
using System.Linq;
using System.Text;
using System.Threading;
using System.IO;
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
Size sz;
Bitmap bitmap;
Graphics graphics;
Thread thread;
MemoryStream ms;
byte[] buf;
public Form1()
{
InitializeComponent();
graphics = Graphics.FromImage(bitmap);
thread = new Thread(Capture_Thread);
ms = new MemoryStream();
}
public void Capture_Thread()
{
while (true)
{
graphics.CopyFromScreen(0, 0, 0, 0, sz);
try
{
buf = ms.ToArray();
}
catch(Exception e)
{
}
pictureBox1.ImageLocation = "x2.jpg";
Thread.Sleep(100);
}
}
private void button1_Click(object sender, EventArgs e)
{
if (!thread.IsAlive)
}
}
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs |
최종 목표는 이미지를 Byte로 변환하여 TCP 통신하는 것이다.
그리고 현 상태의 문제점은 초당 10 프레임이라는 것.
'C#' 카테고리의 다른 글
Delegate (델리게이트) 사용법 및 예시 (0) | 2019.08.27 |
---|---|
외부 FONT 프로젝트에 적용하기 (0) | 2019.04.06 |
폴더 디렉터리 목록 불러오기 및 수정,삭제,저장 (0) | 2019.03.25 |
외부 FONT 프로젝트에 적용하기
1. 위와 같이 글꼴 파일을 하나 준비하자.
2. 위와 같이 프로젝트를 만들어 글꼴 파일을 추가하자
속성에서 출력 디렉터리에 복사 값을 '새 버전이면 복사' 로 변경
3. using System.Drawing.Text 상단에 명시
font 객체 생성 및 폰트 파일 추가 -> 폰트 대입
어때요. 참 쉽죠?
'C#' 카테고리의 다른 글
Delegate (델리게이트) 사용법 및 예시 (0) | 2019.08.27 |
---|---|
컴퓨터 화면 실시간 스트리밍 프로그램 만들기 #1 (1) | 2019.08.03 |
폴더 디렉터리 목록 불러오기 및 수정,삭제,저장 (0) | 2019.03.25 |
폴더 디렉터리 목록 불러오기 및 수정,삭제,저장
이 프로그램을 만들 때 작성한 클래스다.
개요는 이렇다.
1. 복사 대상 폴더를 선택한다.
2. 복사할 폴더를 선택한다.
3. 폴더에 있는 파일들중에 바꿀 텍스트와 원래 텍스트를 적는다.
4. 실행한다.
5. 파일들중 바뀐 항목들을 확인한다.
디렉터리 및 파일을 관리하는 부분을 정리
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68 |
/****************************************************/
/* 변수 선언 부분 */
/****************************************************/
private String m_sOriginPath, m_sTargetPath;
private String m_sOriginText, m_sRewriteText;
private DirectoryInfo m_dOriginDirInfo;
private DirectoryInfo m_dTargetDirInfo;
/****************************************************/
/* COPY할 폴더 경로에 중복 파일 체크 및 묻기 */
/****************************************************/
public bool m_CopyReady()
{
bool delFlag = false;
foreach (var OriginFile in m_dOriginDirInfo.GetFiles())
{
foreach (var TargetFile in m_dTargetDirInfo.GetFiles())
{
if (OriginFile.Name.Equals(TargetFile.Name))
{
if (delFlag)
{
TargetFile.Delete();
}
else
{
if (MessageBox.Show("중복된 이름의 파일이 있습니다.\r삭제후 복사합니다",
"입력 취소", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
TargetFile.Delete();
delFlag = true;
}
else
{
MessageBox.Show("실행을 취소했습니다.");
return false;
}
}
}
}
}
return true;
}
/****************************************************/
/* 파일을 한줄씩 읽어 텍스트 검사 후 수정, 파일 쓰기 */
/****************************************************/
public void m_CopyFiles(String fileName)
{
String[] OriginTextLine = System.IO.File.ReadAllLines(
@m_sOriginPath + "\\" + fileName);
StreamWriter TargetOutputFile = new StreamWriter(
@m_sTargetPath + "\\" + fileName);
if (OriginTextLine.Length > 0)
{
for (int i = 0; i < OriginTextLine.Length; i++)
{
OriginTextLine[i] = OriginTextLine[i].Replace(
m_sOriginText, m_sRewriteText);
TargetOutputFile.WriteLine(OriginTextLine[i]);
}
}
TargetOutputFile.Close();
}
|
cs |
'C#' 카테고리의 다른 글
Delegate (델리게이트) 사용법 및 예시 (0) | 2019.08.27 |
---|---|
컴퓨터 화면 실시간 스트리밍 프로그램 만들기 #1 (1) | 2019.08.03 |
외부 FONT 프로젝트에 적용하기 (0) | 2019.04.06 |