제 3 자 라이브러리를 사용하여 타사 입력 장치에서 Windows Form으로 데이터를 전달하고 있습니다. 내가 뭘 찾고있는 장치에서 입력 데이터를 수집하고, 처리하고 특정 상황에 윈도우 UI 스레드가 무슨 일이 일어나고 있는지 주어진다. 제 3 자 DLL의 소스 코드에 액세스 할 수 없지만 기본 방법이 백그라운드 프로세스에 있다는 것을 알고 있으며 작성하지 않았기 때문에 생각한 기본 UI 스레드로 내 결과를 다시 전달할 수 없습니까?작업자 스레드를 사용하는 다중 스레드 라이브러리가 UI 스레드와 통신 할 수 없습니다. 스레드
윈도우 형태 :
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
// create instance of my listener
MyListener listener = new MyListener(this);
Controller controller = new Controller(listener);
}
}
제 3 자 클래스 리스너를 확장
위한 MyListener 등급 :
public class MyListener : Listener
{
public Form1 form;
private Frame frame;
// overloaded constructor
public LeapListener(Form1 f)
{
form = f;
}
/// <summary>
/// onFrame is the main method that runs every milisecond to gather relevant information
/// </summary>
public override void onFrame(Controller controller)
{
// Get the most recent frame and report some basic information
frame = controller.frame();
}
}
문제는 내가에 myListener 클래스 내에서 어디에서 메인 UI 스레드에 다시 통신 할 수 있지만 배경 스레드에서 실행 중이므로 onFrame 메서드에서 다시 통신 할 수 없습니다. 어쨌든 내가 만들지 않은 백그라운드 스레드에서 주 스레드를 잡아 둘 수 있습니까?
ReportProgress를 시도했습니다. MyListener에서 이벤트를 만들려고 시도했으며 onFrame의 기본 UI 스레드와 대화를 시도하여 응용 프로그램을 중단하고 잘못된 메모리 위치 오류를 제공하려고 시도했습니다.
도움을 주시면 감사하겠습니다.
'생성하지 않은 백그라운드 스레드에서 주 스레드를 보류 할 수 있습니까?' 확실히, 현저한 문제는 C++/C#/무엇이든지 그것을 할 수있는 것입니다. 일반적으로 이것은 언어/라이브러리에서 제공하는 Invoke/BeginInvoke 메서드 또는 SendMessage/PostMessage API입니다. 나왔어? –
'컨트롤러'는 다른 스레드에서 실행되는 객체입니까? – didierc