타이머 종류 (4가지)
멀티쓰레딩 지원하는 타이머들 : System.Threading.Timer 클래스, System.Timers.Timer 클래스
싱글쓰레드만 지원하는 타이머 : System.Windows.Forms.Timer 클래스, System.Windows.Threading.DispatcherTimer 클래스
싱글쓰레드용 타이머는 Invoke 실행없이 바로 UI를 Access할 수 있고, 멀티쓰레드용 타이머는 Invoke대리자를 통해 실행.

멀티쓰레드에서 타이머는 항상 같은 작업쓰레드가 이벤트 핸들러를 실행한다는 보장이 없다.
다른 쓰레드가 핸들러를 실행하게 되기 때문에, Thread Safe하게 작성해야 한다.

 

namespace Study_Timer_1
{
  public partial class Form1 : Form
  {
  System.Timers.Timer timersTimer; // Timers.Timer

  public Form1()
  {
    InitializeComponent();
    timersTimer = new System.Timers.Timer();
    timersTimer.Interval = 5000;
    timersTimer.Elapsed += TimersTimer_Event;
  }

  private void TimersTimer_Event(object sender, ElapsedEventArgs e)
  {
      this.Invoke(new MethodInvoker(delegate ()
      {
      lboxDetail.Items.Add(DateTime.Now.ToString() + "  Timers.Timer 작동중 ");
      lboxDetail.SelectedIndex = lboxDetail.Items.Count - 1;
      }));
  }

  private void button1_Click(object sender, EventArgs e)
  {
      timersTimer.Start();
      Console.WriteLine("Timers.Timer 시작");
  }
  private void button2_Click(object sender, EventArgs e)
  {
      timersTimer.Stop();
      Console.WriteLine("Timers.Timer 중지");
  }
}

}

'c#' 카테고리의 다른 글

c# 크로스 스레드 작업이 잘못되었습니다. 오류 처리  (0) 2020.10.27
c# Enum 사용하기  (0) 2020.10.27
C# 람다식 (Lambda Expression)  (0) 2020.08.15
c# 익명타입  (0) 2020.08.15
c# Thread Safety (Lock 사용하기)  (0) 2020.08.15

오류 확인

원인, 메인쓰레드 이외의 쓰레드에서 메인쓰레드가 관리하는? ListBox콘트롤에 접근하였기 때문에 발생. 

 

해결 방법 : 아래와 같이 Invoke해주기. (추가 공부가 필요해~~ T.T)

this.Invoke(new Action(delegate()

{

 // 콘트롤에 할일

}));

 

^^ 해결한 모습

'c#' 카테고리의 다른 글

C# 타이머 사용법  (0) 2020.10.28
c# Enum 사용하기  (0) 2020.10.27
C# 람다식 (Lambda Expression)  (0) 2020.08.15
c# 익명타입  (0) 2020.08.15
c# Thread Safety (Lock 사용하기)  (0) 2020.08.15


namespace JYDTrading01
{
    public enum HogaEnum 
    {
        지정가 = 00,
        시장가 = 03,
        조건부지정가 = 05,
        최유리지정가 = 06,
        최우선지정가 = 07,
        지정가IOC = 10,
        시장가IOC = 13,
        최유리IOC = 16,
        지정가FOK = 20,
        시장가FOK = 23,
        최유리FOK = 26,
        장전시간외종가 = 61,
        시간외단일가매매 = 62,
        장후시간외종가 = 81,
    }
    public enum OrderTypeEnum 
    {
        신규매수 = 1,
        신규매도 = 2,
        매수취소 = 3,
        매도취소 = 4,
        매수정정 = 5,
        매도정정 = 6,
    }
}

'c#' 카테고리의 다른 글

C# 타이머 사용법  (0) 2020.10.28
c# 크로스 스레드 작업이 잘못되었습니다. 오류 처리  (0) 2020.10.27
C# 람다식 (Lambda Expression)  (0) 2020.08.15
c# 익명타입  (0) 2020.08.15
c# Thread Safety (Lock 사용하기)  (0) 2020.08.15

youtu.be/JKllrtUkKTU

 

 

 

 

 

 

 

 

 

 

람다식 형식 :  (입력파라미터) => { /*명령*/ }

 

입력파라미터의 파라미터 타입은 생략할 수 있음. (Click이벤트에서 이미 그 형식이 정의되어 있기 때문)

명령이 한줄인 경우는 => 옆에 이어서 한줄로 작성 가능. 

------------------------------------------------------------------------------------------------------------------------------

 

 

 

 

 

 

delegate를 먼저 정의

 

 

 

 

 

 

 

delegate 변수에

   람다식 할당.

 

 

              (x) => { retrun x * x; };

입력파라미터 => { 실행명령; };

* return은 당연히 값을 return해야 하기 때문에 생략 가능. 

* 한줄이기 때문에 {  } 생략 가능. 

 

 

 

 

Func<입력데이터타입, 출력데이터타입> 를 사용하면 delegate정의 없이 한줄로 람다식을 사용가능함.

 

Func는 16개까지 입력 파라미터를 받아 들일 수 있다.  

Func는 return타입이 반드시 있는 델리게이터 타입이지만,

    return타입이 필요없는 경우에는 Action 이라는 델리게이트를 사용할 수 있겠다.  

------------------------------------------------------------------------------------------------------------------------

 

 

 

 

 

 

 

 

 

 

 

 

 

다양한 람다식을 사용할 수 있다.

 

Linq에서 람다식을 굉장히 많이 사용하게 됨. 

'c#' 카테고리의 다른 글

c# 크로스 스레드 작업이 잘못되었습니다. 오류 처리  (0) 2020.10.27
c# Enum 사용하기  (0) 2020.10.27
c# 익명타입  (0) 2020.08.15
c# Thread Safety (Lock 사용하기)  (0) 2020.08.15
c# 무명메서드  (0) 2020.08.15

익명타입은 클래스를 만들지 않고 객체를 만들 수 있게 한다. 

 

youtu.be/CLO1Zzww3O0

 

 

 

익명타입은 클래스를 정의하지 않기 때문에 이름을 사용하지 않는다. new 다음에 이름 없음. 

단, 시스템에서는 자동으로 무명타입의 클래스를 자동생성하고 이름도 자동으로 생성한 것임. 

 

이러한 익명타입은 LINQ에서 많이 사용함. 

'c#' 카테고리의 다른 글

c# Enum 사용하기  (0) 2020.10.27
C# 람다식 (Lambda Expression)  (0) 2020.08.15
c# Thread Safety (Lock 사용하기)  (0) 2020.08.15
c# 무명메서드  (0) 2020.08.15
c# 동기 / 비동기  (0) 2020.08.15

youtu.be/aKysG8TlxAg

 

복수의 Thread를 만들어서... 

totalCount라는 필드값을 각각의 Thread들이 1씩 10번을 올리게 한다고 할 경우.....

100이라는 totalCount값이 나오지 않는다. 

(이유 설명은 동영상)

이러한 오류를 막기 위해서 lock을 이용한다.

 

<lock 이용방법> 

 lock을 사용하기 위한 object를 먼저 생성.

 왼쪽과 같이 코드 작성

 

 

 

lock키워드(오브젝트)

{

    락 상태에서 실행할 명령;

}

 

여러 Thead중에 하나의 Thread가 lock을 획득하면 다른 thread들은 lock을 획득할 수 없고, lock이 해제되어야 다음 Thread가 lock을 획득하여 보호 됨. 

 

락 상태에서 실행할 명령은 꼭 필요한 부분만 넣을 것. 

 

Program.cs

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

TableMaker.cs

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'c#' 카테고리의 다른 글

C# 람다식 (Lambda Expression)  (0) 2020.08.15
c# 익명타입  (0) 2020.08.15
c# 무명메서드  (0) 2020.08.15
c# 동기 / 비동기  (0) 2020.08.15
c# 쓰레드(Thread) 사용하기  (0) 2020.08.15

youtu.be/ZhFtPqmiNt0

 

메서드의 이름이 없는 것. 요즘은 무명메서드 보다는 람다식을 많이 사용함. 

 

 

 

 

 

 

 

   delegate 이름삭제 (입력파라미터) { /* -- 메서드 바디 */ };

-------------------------------------------------------------------------------------------------------

-----------------------------------------------------------------------------------------------------------

 

 

 

button1 클릭이벤트 만들어 보기

 

 

 

 

 

 

 

 

 

 

일반적으로 왼쪽과 같이 버튼클릭 이벤트를 만들지만,

 

 

 

 

 

아래와 같이 무명메서드를 사용하여 작성할 수도 있다. 

 

 

 

 

 

 

입력파라미터가 필요없는 경우 아래와 같이 생략이 가능하다. 

 

button1.Click += delegate

{

    MessageBox.Show("Button1");

};

'c#' 카테고리의 다른 글

c# 익명타입  (0) 2020.08.15
c# Thread Safety (Lock 사용하기)  (0) 2020.08.15
c# 동기 / 비동기  (0) 2020.08.15
c# 쓰레드(Thread) 사용하기  (0) 2020.08.15
c# 클래스 & 접근 제한자  (0) 2020.08.15

youtu.be/c4R_7XGlrBU

동기 : 커피숍에서 손님들이 한줄로 서서 주문을 하고 기다리는 상황 (점원 1명)

비동기 : 커피숍에서 손님들이 먼저온 순서대로 주문을 하고 대기 신호기를 받아서 기다리고 주문한 커피를 알아서 받아가는 상황 (점원 2명 이상)

 

youtu.be/vFK5XLcULjM

youtu.be/nI8cmRRKI4s

 

'c#' 카테고리의 다른 글

c# 익명타입  (0) 2020.08.15
c# Thread Safety (Lock 사용하기)  (0) 2020.08.15
c# 무명메서드  (0) 2020.08.15
c# 쓰레드(Thread) 사용하기  (0) 2020.08.15
c# 클래스 & 접근 제한자  (0) 2020.08.15

+ Recent posts