WinForms Threading Problem
I'm having a blocking issue in my WinForm app, so I implemented a thread but it is still blocking. Here is the relevant code:
Code:
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
Thread^ newLogThread = gcnew Thread(gcnew ParameterizedThreadStart(&log));
this->label2->Text = "Logging";
newLogThread->Start(this);
}
here is the log method:
Code:
static void log(System::Object ^obj)
{
SafeThread1(obj);
}
The SafeThread method is where it is blocking
Code:
static void SafeThread1(System::Object ^obj){
Form1 ^ob = (Form1^) obj;
if( ob->button1->InvokeRequired){
logThread ^d = gcnew logThread(SafeThread1);
ob->Invoke(d,gcnew array<System::Object^>{ob});
}
else{
while (ob->connect== EDK_OK) {
ob->state = EE_EngineGetNextEvent(ob->eEvent);
// New event needs to be handled
if (ob->state == EDK_OK) {
EE_Event_t eventType = EE_EmoEngineEventGetType(ob->eEvent);
EE_EmoEngineEventGetUserId(ob->eEvent, &userID);
// Log the EmoState if it has been updated
if (eventType == EE_EmoStateUpdated) {
EE_EmoEngineEventGetEmoState(ob->eEvent, ob->eState);
const float timestamp = ES_GetTimeFromStart(ob->eState);
ob->label2->Text=" New EmoState from user "+timestamp+userID;
ob->logEmoStateTXT(userID, ob->eState, writeHeader);
//writeHeader = false;
}
}else if (ob->state != EDK_NO_EVENT) {
ob->label2->Text = "Internal error in Emotiv Engine!";
break;
}
Thread::Sleep(1);
}
}
}
Any help getting this not to block is greatly appreciated.