Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di taz50
    Registrato dal
    Nov 2003
    Messaggi
    118

    modificare controlli winform da thread separato

    Oggi proprio giornataccia....
    ora sono alle prese con una funzione su thread separato che rimane in ascolto e riceve delle stringhe , alla ricezione della stringa home dovrei aggiornare il controllo del form1 con la chiamata di WindowManager.Open(homep); ma giustamente ricevo un exception "Impossibile creare un'istanza del controllo ActiveX '8856f961-340a-11d0-a96b-00c04fd705a2' perché il thread corrente non è un apartment a thread singolo." xchè sto lavorando su altro thread. Non so usare delegate (ho visto un pò di documentazione, qualcuno ha voglia di dirmi come fare?
    Grazie in anticipo


    private void ClientThread()
    {

    Process app = null, app_precedente = null;
    comando_rx = clienttcp.GetStream();



    byte[] buffer = new byte[1024];

    while (clienttcp.Connected == true)
    {
    if (clienttcp.Connected == true)
    {
    if ((clienttcp.Client.Poll(2, SelectMode.SelectRead) == true))//&&
    //(clienttcp.Client.Poll(2, SelectMode.SelectWrite) == true) &&
    //(clienttcp.Client.Poll(2, SelectMode.SelectError) == false))
    {


    int l_dati_rx = comando_rx.Read(buffer, 0, buffer.Length);

    string string_buffer = Encoding.ASCII.GetString(buffer, 0, l_dati_rx);

    switch (string_buffer)
    {
    case "HOME":
    if (app_precedente != null)
    app_precedente.Kill();

    WindowManager.Open(homep);
    MEGLIO UN MILIONE OGGI E ..... UNO ANCHE DOMANI.

  2. #2
    [quote]Non so usare delegate (ho visto un pò di documentazione, qualcuno ha voglia di dirmi come fare?[quote]

    Cosa non hai capito dei delegate??

    Ciao

  3. #3
    Utente di HTML.it L'avatar di taz50
    Registrato dal
    Nov 2003
    Messaggi
    118
    il funzionamento
    io dovrei richiamare dal thread un delegato del form1 e con questo midificare i controlli (sempre del form1) ??? mi puoi fare un esempio sul codice che ho postato?
    MEGLIO UN MILIONE OGGI E ..... UNO ANCHE DOMANI.

  4. #4
    Ciao.
    Tiani conto che questo è solo un esempio.
    homeep l'ho dichiarato object perchè non so di che tipo sia .... è ovvio che tu dovrai tipizzarlo a dovere.

    codice:
    delegate void Dl(object homeep); 
    private void ThreadSeparato() 
    { 
        object HomeEp = new object(); 
        this.Invoke(new Dl(OpenWindowmanager), HomeEp); 
    } 
    private void OpenWindowmanager(object homeep) 
    { 
        WindowManager.Open(homeep); 
    }
    Il concetto, comunque, grosso modo è questo:
    Ci sono A e B che parlano al telefono......A è il thread principale e B sono gli oggetti che A è occupato a gestire.
    C(thread separato) vuole parlare con A ma non riesce perchè è occupato a parlare con B
    Quindi.....C incarica D(Delegate) di andare da A a dirgli:
    Chiama(Invoke) C che ti deve dire una cosa.
    Quindi....A smette di parlare con B chiama C, sente cosa deve fare, lo fà.....e poi ritorna a parlare con B.


    Facci sapere...
    Ciao

  5. #5
    Utente di HTML.it L'avatar di taz50
    Registrato dal
    Nov 2003
    Messaggi
    118
    Sono proprio de coccio!!!

    mi spiego meglio normalmente per navigare su nuova pagina uso da button su form1

    private void button3_Click(object sender, EventArgs e)
    {
    Uri url = new Uri("www.libero.it");
    WindowManager.Open(url);
    }

    e questo mi permette di navigare dal sito corrente a libero.it

    ora io ho thread separato che deve far navigare il controllo del form1, posto il codice del thread:

    private void ClientThread()
    {
    comando_rx = clienttcp.GetStream();
    byte[] buffer = new byte[1024];
    etc...ect..

    switch (string_buffer)
    {
    case "HOME":

    if (this.InvokeRequired)
    {
    //qui dovrei chiamare
    //Uri url = new Uri("www.libero.it");
    //WindowManager.Open(url); x far navigare il controllo form1 su libero.it

    }

    break;
    etc....etc....


    Descrivo il metodo Open di WindowsManager:
    public void Open(Uri url)
    {
    ExtendedWebBrowser browser = this.New(false);
    browser.Navigate(url);
    }

    Come posso fare dal thread ad usare il metodo Open() sul browser del form1???
    MEGLIO UN MILIONE OGGI E ..... UNO ANCHE DOMANI.

  6. #6
    Utente di HTML.it L'avatar di taz50
    Registrato dal
    Nov 2003
    Messaggi
    118
    Ho risolto
    grazie!
    MEGLIO UN MILIONE OGGI E ..... UNO ANCHE DOMANI.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.