我正在使用第三方库将数据从第三方输入设备传递到Windows窗体。我期望做的是收集来自设备的输入数据,对其进行处理,并给出某些条件向Windows UI线程报告发生的情况。我没有访问第三方DLL的源代码,但我知道主要方法是在后台进程,我不能将我的发现传回给主UI线程,我想是因为我没有创建它?使用工作线程的多线程库无法与UI线程通信
Windows窗体:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
// create instance of my listener
MyListener listener = new MyListener(this);
Controller controller = new Controller(listener);
}
}
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。你有没有? –
'Controller'对象是否在不同的线程中运行? – didierc