Serial에 대한 볼거없는 MSDN
http://msdn.microsoft.com/ko-kr/library/system.io.ports.serialport.aspx
Serial에 대한 반드시 읽어봐야 하는 문서
크로스쓰레드에 대한 MSDN
http://msdn.microsoft.com/ko-kr/library/ms171728(VS.80).aspx
세상에는 나처럼 든거없이 떠드는 빈깡통이 있는반면
항상진중하게 자기 할것만 하고 다른이가 정리한것만 보는 착실한 친구들이 있다.
누가 옳고 그른것들은 없다. 세상의 구성원이란게 원래 그런거니까. 그렇게 그렇게 무엇인가가 조화롭게 이루어져 나가는것이 좋은것이라 생각한다.
두개체가 적정비율이 되는것이 가장 중요한것 같다. 비율이 한쪽으로 쏠린다면 결국 서로 좋은게 없지 않을까 한다.
상상은 스스로 하기로 하고
지금부터 떠들 깡통의 소리는..
시리얼에 대한것이다. 정말 쉽다.
별게 없다.
이글은 단지 심풀하게 시리얼에서 데이터를 받는것을 보여주고자 한다.
왜냐면 내가 해야되는일중에 하나가 전화가 오면 그 전화번호를 화면에서 보여주는데 검색을 통해서 누가 전화를 한지 알려주기 위한것이기 때문이다.
아주 간단하게.. 코딩이 완료되었다.
하지만.. 여기서..
에러를 발견하게 될것인데.
이런에러가 발생될것이다.
이건.. 너무나도 일반적인 이야기 임에도 아직도 질문을 하는 인간들이 많으니.. 상세~~~ 하게 이야기 해보자.
아마도 2.0부터 이렇게 되고.. 그 하위버전에서 처리한다면.. 델리게이트를 외부에서 선언해주고 함수또한 외부에 넣어주고.
구문내에서는.. 호출함수를 적어주면 될것이다.(물론 하위버전에서는 저런 오류가 나오지 않는다.)
굳이 이렇게 귀찮게 코딩을 하는것은 폼클래스에서 돌고있는 쓰레드와
우리가 생성한 시리얼포트에서 처리되는 쓰레드가 말그대로 교차되기 때문이다.
그럴때 교차의 순서를 정해주는 입장이라고 생각하면 되는데…. 즉.. 시리얼에서 데이터를 받아서 그것을 택스트박스에 뿌려주는것을
폼쓰레드의 this.Invoke는 폼의 함수호출을 의미한다.
거기내에서 실제 실행되어야 하는것을 넣어주는것이다.
물론… 폼쓰레드에 넣는게 황당하다고 생각된다면..
이런식으로 textBox의 쓰레드에 넣어도 된다..
여전히 뭔말인지 모르겠다면..
이렇게 만든 아주 간단한.. 폼 파일인데…
이녀석의 쓰레드 개수는
이렇게 15개나 된다. 그냥.. 폼만 만들면.. 대략 9개던가?의 쓰레드가 돌아가는데..
하여간.. 심풀한 폼에도.. 이렇게 쓰레드가 많이 돈다는 이야기다.
그러니 그 녀석들간의 충돌이 문제가 없게 하기위해서는 서로간의 일종의 동기화가 맞아야 하는것이고
동기화를 맞춰 주기위해서 저렇게 처리해주는것이다. 물론.. 무식하게.. 동기화고 뭐고
내맘이다 할때는 그럴때를 위해서.. MS이런것도 만들어 두었다.
using System.IO.Ports;
namespace WindowsApplication9
{
public partial class Form1 : Form
{
SerialPort port = new SerialPort("COM3", 19200, Parity.None, 8, StopBits.One);
public Form1()
{
InitializeComponent();
port.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
port.Open();
CheckForIllegalCrossThreadCalls = false;
}
void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
textBox1.Text += port.ReadExisting();
}
}
}
참고로.. 포트 COM3라고 적은것처럼.. 저것과 속도 19200<--- 등등은 장비에 따라 다르니 저게 틀린다면..
들어오는 정보는.. 잡음이라고 생각해야 할것이다.
위의 크로스 쓰레드에 대한이야기는 네트웍의 채팅프로그램같은것을 만들때도 반드시 알아야 하니..
꼭 숙지(?)고 뭐고 이미 다 알고 있을거라 믿는다.
귀차니즘을 무릎쓰고…
내부에서 함수로 처리되지 않고 실제적인 델리게이트의 모습으로 이쁘게 처리된다면… 요렇게 해야겠지.
'C# > 일반적인코딩' 카테고리의 다른 글
ListView에서 Drag & Drop (0) | 2008.12.29 |
---|---|
C#의 Setting Class (0) | 2008.11.22 |
폼안의 컨트롤을 foreach로 돌리는법 (2) | 2008.11.14 |
자. 새로운 포스팅을 해보자.
사실상 앞서 이야기를 적으면서 올바르지 않는 MVC 의 패턴이야기를 적었다.
그럼에도 아무도 그것을 지적해 주거나 말해주지 않는건
그렇게 세상이 이미 많이 차가워 졌거나 서로간의 간섭할 필요성이 사라지기 때문일것이다.
기본적으로 MS의 VS는 이미 이런식으로 Designer.cs에서는 View의 역할을 그리고
Form1.cs에서는 컨트롤의 역할을 하도록 만들었다.
고전적인 MVC 의 패턴은 단지 우리가 표현하고자 하는것의 실제적인 MODEL만 따로 만들기만 하면 크게 문제 없이 구성이 완료된것이다.
하지만 말이다. 기것 자동컨트롤로가 만들어 주는것이 전부로 코딩을 한다면? 그것이 옳을것인가?
그런 생각을 해보지는 않았는가?
조금 더 내가 이미 설명한 형태처럼 조금은 다르게 저 폼과 디자이너를 하나의 뷰단에 넣는입장의 분리형은 어떻게 생각하는가 말이다.
컨트롤이 꼭 하나일 가능성을 가지고 있는가 그렇다면 새로운 컨트롤
지금의 이야기에서 계속 진행하듯이 전체를 대변하는 하나의 컨트롤이 있고 이런 각자의 컨트롤들은.. 단지 지칭하지는 않지만 말그대로 로컬의 컨트롤들이라고
개념을 가져보자.
이말은 이미 고전적인 형태의 패턴은 그 시절을 반향하기 때문일것이다. 게다가 그시절 언어의 구현에도 영향을 미칠것이고 지금의 입장에서는 조금 변형적인건 어떤가 하는 이야기다.
물론 정확하게 내가 만든코드는 정상적이라고 볼수 없다.
왜냐면 클래의 각 성향 은닉성같은것은 지켜주지 않기 때문일것이다.
여하튼… 계속 되는 이야기를 해보도록 하자.
(참고로 이런식과 유사하게 이야기 하는것을 Front Controller라고 이야기 하기도 한다. (유사하다고 이야기했다.) )
--------------------------------------------------------------------------------------------
바인딩의 방법은 여러가지가 있지만 기본적으로 DB에 바로 하는것들만 다들 익숙하다. 아니 실제적으로는 DataTable같은것에 바인딩이 될것이다. 이것 조차도 대부분 자동화 툴에 익숙하다 보니 그렇게 들 한다.
바인딩은 나중에 이야기 하고
이제 폼에서 데이터를 가져왔다면 DB실제적으로 데이터를 넣어야 될것이다.
이제 MDB의 모듈을 더 추가해서.. MDB에다가 데이터를 넣어보도록 하자.
자.. 입력을 해야하는데.
입력을 위해서는 테이블이란것이 필요하다.
테이블의 이름을 Form이란곳의 태그에 적도록 하자.
그럼..
insert into (Form의 테그이름) (column1, clumn2...) values(value1,value2...)
의 형태가 될것이다.
앞서 우리가 만든것은 무엇인가?
폼을 하나의 데이타셋으로 만드는것이다. (이말은 약간의 어폐가 있긴하다)
그럼 그것을 인자값으로 받아 입력한다면? 된다는이야기가 된다.
여기서 넘겨주는것은 폼의 주소값을 넘겨주도록 하자.
(개인적으로 인자값의 개수가 많은것을 싫어한다.)
물론 여기서 하나의 폼이 꼭 하나의 테이블과 대응된다는것 자체가 말이안되는 사건이긴하다만 여타 이런코딩을 처음보는 사람들이 대부분이 아닐것인가?
그렇다. 그러니 지금은 복잡하게 나간다면 더욱 더 어렵게만 느껴질테니 조금은 단순하게 하나의 폼에 하나의 테이블이란 (?)생각으로 가자.
게다가 이미 어느정도 이해를 했다면 사실상 이런건 문제가 아닌 그냥 SP단에서 처리를 할것이니 더욱 더 문제가 아니다.
ps1)
내가 추구하는 코딩이란것은 최적화, 빠른것을 추구하지 않는다.
아니 지독스럽게 그런것을 추구할때도 있다.
하지만 만약 둘중 어느것을 선택해야되는 입장에 선다면 코딩의 편의를 더 추구한다.
'C# DB 코딩 강좌' 카테고리의 다른 글
C#을 이용한 DB코딩 20 (0) | 2008.11.14 |
---|---|
C#을 이용한 DB코딩 19 (0) | 2008.11.14 |
C#을 이용한 DB코딩 18 (0) | 2008.11.14 |
C#을 이용한 DB코딩 17 (0) | 2008.11.14 |
C#을 이용한 DB코딩 16(실습파일포함) (0) | 2008.11.14 |
C#을 이용한 DB코딩 15 (0) | 2008.11.14 |
C#을 이용한 DB코딩 14 (0) | 2008.11.14 |
C#을 이용한 DB코딩 13 (0) | 2008.11.14 |
C#을 이용한 DB코딩 12 (0) | 2008.11.14 |
C#을 이용한 DB코딩 11 (0) | 2008.11.14 |
잠이온다.
그런데 자기가 싫다. 왜 일까?
곧 죽을것만 같다.
죽기전에 죽기전에 뭘 해야한다는건가?
아님 죽지않기위해서 뭘 해야한다는건가?
춥다. 곧 추위가 날 죽일것만 같다. 곧 나는 굶어죽을것만 같고. 세상이란 곳에서 살아남기 위해서 어떻게 내 자리에 서있어야 될지 모르겠다. 모두가 날 죽일것만 같이 두렵고 그럼에도 자신있게 서있어야 할뿐이다.
한없이 약해질때 도저히 이런 나 스스로를 어떻게 조처할 수 없을 수준으로 나약해 진다.
어떻게 날 벗어나야 하는가?
어떻게 한없이 긍정적이고 한없이 미래지향적으로 살아가야 할지 모르겠다.
갑자기 바뀌어지는 패턴들로 인해서 지금은 한없이 우울해 지려고 한다.
아니 우울한것은 아니다.
단지 단지말이다.
내가 앞으로 살아갈것이 적막속에 갇혀 있는것뿐이다.
곧 불을 밝히고 다시금 힘차게 나아가겠지만 지금은 이 적막속에서 내가 가야할길을 찾기위해서 눈빛을 밝히고 있을뿐이다.
'사는생각들' 카테고리의 다른 글
진짜와 가짜 (0) | 2008.12.10 |
---|---|
한밤의 커피한잔. (0) | 2008.12.02 |
50%는 까라.. (0) | 2008.12.01 |
MS의 2010 (0) | 2008.11.23 |
수소관련 주식을 사야겠다. (0) | 2008.11.23 |
대단한 강좌중 하나 (1) | 2008.11.14 |
어쩌면 난 심각한 편견을 가지고 있는것 같다 (0) | 2008.11.14 |
이외수의 글은 많은 생각을 하게 만든다. (0) | 2008.11.14 |
영어에 대한 어느 수준이 되어야 겠다. (0) | 2008.11.14 |
세상은 아직도 재미난게 많다. (0) | 2008.11.12 |