我正在使用第 3 方库将数据从第 3 方输入设备传送到 Windows 窗体。我要做的是从设备收集输入数据,对其进行处理并在特定条件下向 Windows UI 线程报告正在发生的事情。我无权访问第 3 方 DLL 的源代码,但我知道主要方法在后台进程中,并且我无法将我的发现传达回我认为的主 UI 线程,因为我没有创建它?
窗体:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
// create instance of my listener
MyListener listener = new MyListener(this);
Controller controller = new Controller(listener);
}
}
MyListener 类扩展了第 3 方类监听器:
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 线程对话都会使应用程序崩溃并给我无效的内存位置错误。
任何帮助将不胜感激。