멀티 스레딩/비동기 처리가 처음이므로 Task.Factory.StartNew()보다 더 나은 방법이 있다면 알려 주시기 바랍니다.작업에서 이벤트를 구독하는 방법
내 솔루션에는 2 개의 프로젝트가 있습니다. 두 번째 프로젝트를 첫 번째 자식 스레드로 시작하고 싶습니다. 그래서 프로그램을 시작하고 메인 스레드가 자식 스레드에서 두 번째 프로젝트를 시작하도록합니다. 두 번째 프로그램에는 주 스레드를 구독하고 싶지만 어떻게해야할지 모릅니다.
코드 :
public class Program //First project
{
//Test data
static TimeSpan formatTime = new TimeSpan(0, 0, 0); //Midnight
static char driveLetter = 'z';
static Format f = Format.FAT32;
static string name = "Test";
//End test data
public static void Main(string[] args)
{
//How can I subscribe to DriveFormatNeeded here??
Task t = Task.Factory.StartNew(() => DriveFormatter.DriveFormatter.Main(formatTime, driveLetter, f, name), TaskCreationOptions.LongRunning);
}
}
_
public class DriveFormatter //Project 2
{
public static event EventHandler<CharEventArgs> DriveFormatNeeded;
public static void Main(TimeSpan formatTime, char driveLetter, Format format, string driveName)
{
//Do stuff that will eventually raise DriveFormatNeeded event
}
내가 주 프로젝트에서 DriveFormatNeeded 이벤트를 구독 할 수있는 방법 (Task.Factory.StartNew은()이다)? 아니면 내가 완전히이 문제에 접근하고 있습니까?
참고 :이 질문은 작업의 이벤트를 구독하는 방법 (또는 멀티 스레딩 관점에서이 기능을보다 효과적으로 디자인하는 방법)에 대한 것입니다. 이 질문은 내가 C#에서 드라이브를 포맷해서는 안되는 이유에 관한 것이 아닙니다. 나는 그 대화를 이미 끝내 었습니다.
미리 감사드립니다.
"여기"를 구독 한 경우 발생했을 수있는 이벤트의 일부 또는 전부를 이미 놓친 것일 수 있습니다. –
좋은 지적. 먼저 구독을 반영하여 편집 – BrianH
먼저 'Main' 메소드를 호출하기 전에'Task.Run'과 withing을 사용해야합니다. 이벤트에 가입하십시오. 'Main' 메쏘드가 실행되는 동안 무엇을 할 것인가에 대해 스스로에게 묻고 싶은 질문이 있습니까? 비동기는 멀티 스레딩이 아닙니다. 비동기는 스레드없이 수행 될 수 있습니다. – CodingYoshi