일반적으로 C#과 코딩에 비교적 익숙하지 않습니다. 나는 어떤 논리를 가지고있는 프로그 램을 작성하려고하는데, 이는 또한 진행 표시 줄과 함께 진행 상황을 표시합니다. 모든 비즈니스 로직을 수행하는 Main() 스레드를 시작하고 있습니다. 그것은 진행 막대가 udpated 필요한 지점에서 trigerred 이벤트가 있습니다.C# Winform 다중 스레드 시퀀스
Form 개체는 비즈니스 논리 이벤트를 구독하고 진행률 막대 및 텍스트 레이블을 업데이트하기 위해 호출되는 스레드 안전 대리인을가집니다.
제 문제는 Form이 주 스레드에서 시작되므로 Application.Run() 전에 비즈니스 로직 스레드를 시작해야한다는 것입니다. 첫 번째 ProgressUpdate 이벤트가 trigerred되면 Form 개체가 여전히 존재하지 않습니다. 내가 해킹하는 방법은 Thread.Sleep (100) 두 번째 스레드에 추가하는 것,하지만 나는 그것을 좋아하지 않아. 이 문제를 어떻게 해결할 수 있습니까? 완전히 잘못된 트랙에 있습니까? (심지어 의미가 있습니까?)
Form1 theForm = new Form1();
CreateReport theCreateReport = new CreateReport();
Thread t = new Thread(new ThreadStart(theCreateReport.DoProcess));
t.IsBackground = true;
theForm.Subscribe(theCreateReport);
t.Start();
Application.Run(theForm);
theForm은 양식입니다. theCreateReport는 비즈니스 로직이 시작되는 곳입니다.
그래서 기본 VC# S 프로젝트에서 생성자를 나눠 줬습니다. 그래도 작동하지 않는 것 같습니다. 개체가 만들어지기 전에 Invoke/BeginInvoke를 사용해서는 안된다는 오류가 나타납니다. try catch 블록을 빈 캐치로 놓으면 작동하지만 해킹처럼 느껴집니다. 그것은 내가 까다로울 수 있습니다. – whatsinaname
해킹입니다. .Net의 양식 기반 응용 프로그램은 기본적으로 기본 양식 개념을 기반으로합니다. 프로젝트가 이미 기본 폼을 사용하기 때문에이 것을 싸울 이유가 없습니다. – MusiGenesis
포마 (Poma)가 언급했듯이이 형식은 이미 존재했기 때문에 이것을 대답으로 표시합니다. 오류는 내 코드의 다른 섹션에 있습니다. 고맙습니다. – whatsinaname