본문 바로가기

개발언어/C#191

[C#] Task.Run() vs Task.Factory.StartNew() - Task.Run() Task.Factory.StartNew() 를 좀 더 간단히 사용하도록 도입 - Task.Factory.StartNew() 사용한 샘플 private void button1_Click(object sender, EventArgs e) { textBox1.Text = "Begin"; textBox1.Refresh(); AsyncSleep(); //메서드의 비동기 처리 textBox1.Text = "End"; } private async void AsyncSleep() { await AwaitSleep(); textBox1.Text = "Completed"; } private Task AwaitSleep() { return Task.Factory.StartNew(() => { Syst.. 2023. 5. 12.
[C#] Task.Run() - 샘플1 (Console) using System; using System.Threading; using System.Threading.Tasks; namespace tstAsyncConsole { class Program { static void Main(string[] args) { Console.WriteLine("Before"); int result = 0; var task1 = Task.Run(() => { result = LongCalc(10); }); task1.Wait(); Console.WriteLine(result.ToString()); Console.WriteLine("After"); Console.ReadKey(); } static int LongCalc(int n) { int r.. 2023. 5. 12.
[C#] Task.Wait() vs await Task - Task.Wait은 Task가 끝날 때까지 기다리는 블로킹 동기화 방식 using System; using System.Threading; using System.Threading.Tasks; namespace tstAsyncConsole { class Program { static void Main(string[] args) { Console.WriteLine("Before"); Task1().Wait(); Console.WriteLine("After"); Console.ReadKey(); } public static async Task Task1() { await Task.Delay(1500); Console.WriteLine("Finished Task1"); } } } - await은 해당 Ta.. 2023. 5. 12.
[C#] 비동기 async / await 키워드 C# 5.0부터 새로운 C# 키워드로 async와 await가 추가되었다. 이 키워드들은 기존의 비동기 프로그래밍 (asynchronous programming)을 보다 손쉽게 지원하기 위해 C# 5.0에 추가된 중요한 기능이다. C# async는 컴파일러에게 해당 메서드가 await를 가지고 있음을 알려주는 역활을 한다. async라고 표시된 메서드는 await를 1개 이상 가질 수 있는데, 하나도 없는 경우라도 컴파일은 가능하지만 Warning 메시지가 표시된다. async를 표시한다고 해서 자동으로 비동기 방식으로 프로그램을 수행하는 것은 아니고, 일종의 보조 역활을 하는 컴파일러 지시어로 볼 수 있다. async 메서드의 리턴 타입은 대부분의 경우 Task (리턴값이 있는 경우) 혹은 Task (.. 2023. 5. 12.
[C#] USB상태 변경시 .. private const int DBT_DEVICEARRIVAL = 0x8000; private const int DBT_DEVICEREMOVECOMPLETE = 0x8004; private const int DBT_DEVTYP_VOLUME = 0x00000002; using System.Runtime.InteropServices; using System.Windows.Forms; namespace UsbDriveDetector { public partial class Form1 : Form { private const int WM_DEVICECHANGE = 0x219; private const int DBT_DEVICEARRIVAL = 0x8000; private const int DBT_DEVI.. 2023. 5. 10.
[C#/WINFORM] Control 클래스 : ProcessCmdKey 메소드를 사용해 CTRL, SHIFT, ALT 조합 키 입력받기 ▶ MainForm.cs using System.Windows.Forms; namespace TestProject { /// /// 메인 폼 /// public partial class MainForm : Form { //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor ////////////////////////////////////////////////////////////////////////////////////////// Public #region 생성자 - MainForm() /// /// 생성자 /// public MainForm() { Init.. 2023. 4. 17.
[C#] 도구 상자 항목 ' ' 을(를) 로드하지 못했습니다. 해당 항목은 도구 상자에서 제거됩니다. / 유저 컨트롤 x86 -> x64 로 프로그램을 변경하면서 유저컨트롤 항목을 디자이너에서 사용시 오류가 났다. 구글링을 하면 프로젝트를 정리 하고 다시 빌드해라 유저컨트롤을 프로젝트에서 제거하고 다시 등록해라 등등등...여러 방법이 나오지만 해결 되지 않았다... 결국 이것저것 시도하다가 반정도는 해결 한거 같다. 솔루션은 x64 프로젝트는 Any CPU 설정하니 정상적으로 동작이 됐다. 뭔가 퍼펙트한? 해결 방법은 아니지만 우선 문저없이 동작이 되니까 우선 적용해서 개발을 다시 진행 했다. 출처 : C# / 도구 상자 항목 ' ' 을(를) 로드하지 못했습니다. 해당 항목은 도구 상자에서 제거됩니다. / 유저 컨트롤 :: 무엇이든 공부하는 블로그 (tistory.com) 2023. 4. 12.
[C#] 투명배경 RichTextBox 배경이 투명한 리치텍스트박스(RichTextBox) 입니다. 메신저 대화창 작업중 투명한 넘이 필요해지는 바람에... public class TransparentRichTextBox : System.Windows.Forms.RichTextBox { public TransparentRichTextBox() { base.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.Vertical; } [System.Runtime.InteropServices.DllImport("kernel32.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto)] public static extern IntPtr LoadLibrar.. 2023. 4. 11.
[C#] byte데이터를 Naudio에서 실시간 출력 안녕하세요! C#에서 소켓통신으로 받은 byte 데이터를 NAudio 라이브러리를 사용하여 실시간으로 스피커로 출력하는 코드를 만드는 방법에 대해 알려드리겠습니다. 먼저, 소켓통신으로 받은 byte 데이터를 큐에 담습니다. 그리고 큐에서 데이터를 읽어들여 NAudio 라이브러리를 사용하여 스피커로 출력하면 됩니다. 아래는 소켓통신으로 받은 byte 데이터를 NAudio 라이브러리를 사용하여 실시간으로 스피커로 출력하는 코드입니다. using NAudio.Wave; using System.Net.Sockets; private WaveOutEvent waveOut; private BufferedWaveProvider bufferedWaveProvider; //별도 스레드에서 실행 public void Sta.. 2023. 4. 4.
[WinForm] 두 개의 Chart, 수학 함수 그래프 그리기 두 개의 차트 영역, 두 개의 시리즈 사용 Chart 컨트롤 하나는 ChartArea 컬렉션과 Series 컬렉션을 갖는다. ChartArea는 차트가 그려지는 영역이고, Series는 데이터를 의미한다. 즉, Chart 컨트롤 하나가 여러 개의 차트 영역과 시리즈를 가질 수 있다. Chart 컨트롤을 폼에 추가하면 ChartArea1과 Series1이 추가되어있다. 이번에 만들어볼 차트는 두 개의 차트 영역에 두 개의 시리즈(수학, 영어)가 출력되게한다. 이때, 아래에 있는 "합쳐서 그리기" 버튼을 클릭하면 두 개의 시리즈가 하나의 차트 영역에 합쳐서 보이도록 해준다. 다시 "나누어 그리기" 버튼을 클릭하면 처음처럼 두 개의 차트 영역에 각각의 시리즈가 그려지게 되는 차트를 만들어볼것이다. 도구상자에서.. 2023. 3. 29.