.net - my thread does not see windows Form components -



.net - my thread does not see windows Form components -

i'm making windows form application uses threads, threads running , works, want thread access form components. btnmain not seen within thread function. how can solve this?, here code

#pragma 1 time namespace winappsocket { struct struttura{ char c; int num; } mystruct; uint serverthread(lpvoid pparam) { printf("starting tcp server\r\n"); socket server; wsadata wsadata; sockaddr_in local; int wsaret=wsastartup(0x101,&wsadata); if(wsaret!=0) { homecoming 0; } local.sin_family=af_inet; local.sin_addr.s_un.s_addr=inaddr_any; local.sin_port=htons((u_short)20248); server=socket(af_inet,sock_stream,0); if(server==invalid_socket) { homecoming 0; } if(bind(server,(sockaddr*)&local,sizeof(local))!=0) { homecoming 0; } if(listen(server,10)!=0) { homecoming 0; } socket client; sockaddr_in from; int fromlen=sizeof(from); int buffer; char buff; while(true) { client=accept(server,(struct sockaddr*)&from,&fromlen); //printf("pppp\n"); //con la struct int numbyte=recv(client,(char*) &mystruct, (int) sizeof(mystruct), 0); //printf("%c\t%d\n", mystruct.c, mystruct.num); //ricevere united nations char funziona //int numbyte=recv(client, &buff, (int) sizeof(buff), 0); //printf("%c\t%d\n", buff, numbyte); //int numbyte=recv(client, buffer, (int) strlen(buffer), 0); //questo funziona //int numbyte=recv(client, (char*)&buffer, (int) sizeof(buffer), 0); //printf("%d\t%d\n", buffer, numbyte); //printf("connection %s\n", inet_ntoa(from.sin_addr)); closesocket(client); } closesocket(server); wsacleanup(); homecoming 0; } using namespace system; using namespace system::componentmodel; using namespace system::collections; using namespace system::windows::forms; using namespace system::data; using namespace system::drawing; /// <summary> /// summary form1 /// /// warning: if alter name of class, need alter /// 'resource file name' property managed resource compiler tool /// associated .resx files class depends on. otherwise, /// designers not able interact localized /// resources associated form. /// </summary> public ref class form1 : public system::windows::forms::form { public: form1(void) { initializecomponent(); // //todo: add together constructor code here // } protected: /// <summary> /// clean resources beingness used. /// </summary> ~form1() { if (components) { delete components; } } public: system::windows::forms::button^ btnmain; protected: private: /// <summary> /// required designer variable. /// </summary> system::componentmodel::container ^components; #pragma part windows form designer generated code /// <summary> /// required method designer back upwards - not modify /// contents of method code editor. /// </summary> void initializecomponent(void) { this->btnmain = (gcnew system::windows::forms::button()); this->suspendlayout(); // // btnmain // this->btnmain->location = system::drawing::point(139, 21); this->btnmain->name = l"btnmain"; this->btnmain->size = system::drawing::size(120, 36); this->btnmain->tabindex = 0; this->btnmain->text = l"start main"; this->btnmain->usevisualstylebackcolor = true; this->btnmain->click += gcnew system::eventhandler(this, &form1::btnmain_click); // // form1 // this->autoscaledimensions = system::drawing::sizef(6, 13); this->autoscalemode = system::windows::forms::autoscalemode::font; this->clientsize = system::drawing::size(284, 262); this->controls->add(this->btnmain); this->name = l"form1"; this->text = l"package analyzer"; this->resumelayout(false); } #pragma endregion private: system::void btnmain_click(system::object^ sender, system::eventargs^ e) { afxbeginthread(serverthread,0); //while(_getch()!=27); } }; }

why don't utilize .net threads when using managed c++? makes things much easier... will, however, exceptions when access controls different thread - you'll have utilize invoke update controls thread.

edit well, i' can write c#, i'm sure can convert c++:

private void btnmain_click(object sender, eventargs e) { thread t = new thread(new threadstart(threadmethod)); t.start(); } private void threadmethod(object state) { // state set if used parameterizedthreadstart , t.start(...) above // stuff here ... // set text of label on form. must utilize this.invoke, otherwise // you'll run exception changing controls different thread this.invoke((action)delegate() { label1.text = "hello"; }); }

but it's not required in case - utilize .net tcp classes!

you should avoid mixing managed unmanaged code , instead larn utilize abilities of framework.

.net winforms multithreading c++-cli

Comments

Popular posts from this blog

delphi - blogger via idHTTP : error 400 bad request -

c++ - cuda, pycuda -- how to write complex numbers -- errors:class "cuComplex" has no member "i" -

How do I check if an insert was successful with MySQLdb in Python? -