저는 생산자/소비자 문제를 구현하고 있습니다. 코드는 다음과 같습니다컨트롤이 무효화되는 것을 감지하는 방법은 무엇입니까?
void producer()
{
// produce item
// update some control in form
}
void consumer()
{
// consume item
// update some control in form
}
생산자와 소비자 방법은 내 양식을 작성한 다른 스레드에서 실행되는, 그래서 나는 형태로 컨트롤을 업데이트 할 수 없습니다. 나는 다음과 같은 코드를 시도했다 :
void producer()
{
// produce item
// put the work to be done in a queue
this.Invalidate();
}
void consumer()
{
// consume item
// put the work to be done in a queue
this.Invalidate();
}
그래서 이제 폼이 무효화되었는지 감지해야한다. 저는 Form의 이벤트 목록을 살펴 보았고 가장 좋은 것은 페인트 이벤트였습니다. 작업을 완료 한 코드를 넣으면 제대로 작동합니다. 문제는 어떻게 작동하는지는 모르겠지만 올바른 방식으로이 작업을 수행했는지 의심 스럽습니다. 저는 그림이 아닌 페인트가 일을하는 데 적합한 장소가 아니라고 생각합니다. 나는 이것을 할 수있는 더 좋은 방법이 있는지 궁금 해서요.
편집 - 발췌문에서 Invalidated에 대한 이벤트 핸들러가
public Form1()
{
InitializeComponent();
this.Invalidated += InvalidateEventHandler;
}
void producer(object o)
{
// produce
// put work in queue
this.Invalidate();
}
public void InvalidateEventHandler(object sender, InvalidateEventArgs e)
{
// Do Stuff to form -- Where exception raises
}
아마도 알 수 없습니다. 하지만 스레드가 작성자가 아닌 문제를 해결하는 방법은 무엇입니까? 설명해 주시겠습니까? – atoMerz
이 문제를 해결하기 위해 Invoke가 만들어졌습니다. –
감사합니다. – atoMerz