using System; using System.Windows.Forms; using System.Text; using System.Runtime.InteropServices;
namespace RecvPackage { public class Program : Form { public const int WM_COPYDATA=0x004A;
public struct COPYDATASTRUCT { public IntPtr dwData; public int cbData; public IntPtr lpData; }
public Program() { //From FindWindow(), This Application is Detected!! //From FindWindow(), This Application is Detected!! //The KeyWord is Below String,,,,, this.Text = "RecvSendDataMonitoring"; }
protected override void WndProc(ref Message m) { base.WndProc(ref m); try { switch(m.Msg) { case WM_COPYDATA : COPYDATASTRUCT cds = (COPYDATASTRUCT)m.GetLParam(typeof(COPYDATASTRUCT)); byte[] recvData = new byte[cds.cbData]; Marshal.Copy(cds.lpData, recvData, 0, cds.cbData); Console.WriteLine(Encoding.Default.GetString(recvData));
public static void Main(string[] args) { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Program()); } }//end of class }//end of namespace
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Runtime.InteropServices;
namespace WinTrisEx01 { public partial class Form1 : Form { public const int WM_COPYDATA = 0x004A;
/* * From Process To Process, Message Send,Recv */
namespace RecvPackage { public class Program : Form { public const int WM_COPYDATA=0x004A;
public struct COPYDATASTRUCT { public IntPtr dwData; public int dbData; public IntPtr lpData; }
public Program() { //From FindWindow(), This Application is Detected!! //From FindWindow(), This Application is Detected!! //The KeyWord is Below String,,,,, this.Text = "RecvSendDataMonitoring"; }
protected override void WndProc(ref Message m) { base.WndProc(ref m); try { switch(m.Msg) { case WM_COPYDATA : COPYDATASTRUCT cds = (COPYDATASTRUCT)m.GetLParam(typeof(COPYDATASTRUCT)); byte[] recvData = new byte[cds.cbData]; Marshal.Copy(cds.lpData, recvData, 0, cds.cbData); Console.WriteLine(Encoding.Default.GetString(recvData));
public static void Main(string[] args) { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Program()); } }//end of class }//end of namespace
/* BackgroundWorker를 통해 조금 더 안전하게 이벤트 기반으로 비동기 처리를 진행하는 패턴 사용해보기 (RunWorkerAsync, IsBusy)
BackgroundWorker를 통해 조금 더 안전하게 이벤트 기반으로 비동기 처리를 진행하는 패턴 사용해보기 (RunWorkerAsync, IsBusy)
BackgroundWorker를 통해 조금 더 안전하게 이벤트 기반으로 비동기 처리를 진행하는 패턴 사용해보기 (RunWorkerAsync, IsBusy)
BackgroundWorker를 통해 조금 더 안전하게 이벤트 기반으로 비동기 처리를 진행하는 패턴 사용해보기 (RunWorkerAsync, IsBusy) */
1. ".." 은 현재 실행되는 모습이다. 예를 들어 마우스를 움직인다던지, 키보드를 사용한다던지, 어떤 행위를 하는 2. 메세지는 백그라운드로 실행되는 행위의 모습이다. 예을 들어 서버와의 통신, 프로그래스바 등이 움직이는 행위를 연출할수 있다. 클라이언트와 서버와의 통신시에 자유롭게 마우스나 키보드나 행위를 할수 있어야 한다. 프로그래스바가 움직이는동안에서 마우스나 키보드나 행위를 할수 있어야 한다. 이런모습을 100에서 9999까지의 숫자중에 프라임넘버가 몇개인지 COUNT하는 TASK를 텍스트로 표현해보았다. Console.WriteLine(">>>>>>Long running task start!!"); Console.WriteLine(">>>>>>Prime Number Cnt:[" + cnt.ToString("0000") + "]"); Console.WriteLine(">>>>>>Long running task end!!"); Console.WriteLine(">>>>>>Long running task completed!!");
3. 실제소스코드이다. 위를 표현한,ㅡㅡㅡㅡㅡ
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.ComponentModel; namespace TrisPackage.Tris { class Program { static void Main(string[] args) { BackgroundWorkerCls bwt = new BackgroundWorkerCls(); while(true) { bwt.Execute(); } } } class BackgroundWorkerCls { private BackgroundWorker worker; public BackgroundWorkerCls() { worker = new BackgroundWorker(); worker.DoWork += new DoWorkEventHandler(worker_DoWork); worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted); } ~BackgroundWorkerCls() { worker.DoWork -= new DoWorkEventHandler(worker_DoWork); } public void Execute() { Console.Write(".."); // InvalidOperationException Protection!! // InvalidOperationException Protection!! if(!worker.IsBusy) worker.RunWorkerAsync(); } //Work Thread Execute Task Method //Work Thread Execute Task Method //Work Thread Execute Task Method void worker_DoWork(object sender, DoWorkEventArgs e) { Console.WriteLine(""); Console.WriteLine(">>>>>>Long running task start!!");
int ii,kk,ff,prime,cnt=0;
for(ii=100; ii < 9999; ii++) { prime = ii; ff = 0; for(kk=1; kk <= prime; kk++) { if(prime / kk * kk == prime) ff++; }