我正在使用第三方庫將數據從第三方輸入設備傳遞到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