루프의 내용을 내 UI에 표시하려고합니다. 첫째로, 나는이에게 (윈폼 사용) 올바른 방법으로 접근하고있어 확실하지 않다 그러나 이것은 내가 뭘하는지입니다 :ApartmentState 설정에도 불구하고 스레드 오류가 교차합니다.
foreach (string item in stringArray)
{
Thread thread = new Thread(delegate()
{
UpdatedResultEvent(item);
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
}
나는이 충분한 정보를 희망하지만, 그 다음이 아닌 경우 여기서 자세히 설명하겠습니다.
내 Program.cs (WinForm) 클래스와 logicClass라는 다른 클래스가 두 개 있습니다. LogicalClass에 프로그램 객체의 인스턴스를 전달합니다. 내 logicClass에는 내 Program 클래스의 메서드와 일치하는 서명이있는 대리인이 있습니다. 델리게이트로 전달되는 방법은 오류 메시지가 유효
에 만들어진 스레드가 아닌 다른 스레드 에서 액세스 제어스레드 간 동작 아니다
public void UpdateResultsOnScreen(string newContent) { txtResults.Text += newContent; }
: 그것은
편집
목표는 방법의 t와 유사하다 그는 진행률 막대 작업을 실시간으로 업데이 트지고 제어를 볼 수 있습니다. 현재 작동하더라도 스레드는 스레드가 완료 될 때까지 '결과'를 화면에 반환하지 않습니다.
정말 좋지만 화면에 내 결과가 실시간으로 표시되지 않습니다. 내 텍스트 상자는 한 번에 하나의 항목을 채우는 대신 모든 것을 한 번에 보여줍니다. 예를 들어, UpdatedResultEvent (item)이 호출 될 때마다 (데이터베이스/webservice 호출 등으로 인해) 5 초가 걸린다고 가정합니다. 이것은 내 화면을 5 초 동안 업데이트하고 싶습니다. – Dave
@DaveRook 수정 한 코드를 사용해보세요. 이전 코드 (Invoke)조차도 예상대로 UI를 작동하고 업데이트해야한다고 생각합니다. 그러나 작동하지 않으면 정확히 어떻게하는지 알 필요가 있습니다. 나는 그것이 또 다른 질문이라고 생각한다. –
그래, 이미 BeginInvoke()를 사용했지만 동일한 결과를 시도했다. 이게 효과가 있다고 생각한다면 어쩌면 저의 디자인에 결함이있는 것일 수도 있습니다! – Dave