Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 16 su 16
  1. #11
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,536
    forse questo si avvicina di più a quello che credo voglia ottenere :

    codice:
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Threading;
    using System.Collections;
    
    namespace testHtmlIt
    {
        public delegate void Continua();
        public partial class Form1 : Form
        {
            int c = 0;//creo un indice per l'array che sarà valorizzato nel ciclo successivo (sarebbe l'ID del DB)
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                //dichiaro un nuovo thread e lo avvio per evitare di bloccare la form
                Thread t = new Thread(startThread);
                t.Start();
                c = 0;//riposto sempre a 0 l'ID (per praticità)              
            }
    
            void startThread()
            {
                ArrayList arrList = (ArrayList)class1.arr.Clone();//toricamente sto copiando i dati dal db per iterarli
                foreach (string arr in arrList)// itero idati
                {
                    if (arr == "c")//se trovo un anomalia entro nella condizione
                    {
                        Thread t = new Thread(startThread2);//creo e avvio un nuovo thread per permettere la modifica e mettere in attesa questo thread
                        t.Start();
                        while (!class1.Riparti) ;  //adesso questo thread è in attesa della modifica da parte dell'altro form
                        ///finche quest'ultimo non modifica la proprietà della classe che sto usando per simulare il db                 
                        class1.Riparti = false;//per eventali ripetizioni del tutto
                    }
                    c++;//incremento l'ID ad ogni ciclo 
                }
                //a questo punto sono stati modificati tutti i valori contenenti "c" nel pseudoDB in maniera sequenziale
                c = 0;
            }
    
            void startThread2()
            {
                if (this.InvokeRequired)//necessario per avviare il secondo form dall'altro thread
                {
                    this.Invoke(new Continua(continua));
                }
                else continua();
            }
    
            void continua()//avvio il form secondario prendendo e passandoli l'ID da modificare
            {
                Form2 f2 = new Form2(c);
                f2.Show();
            }
        }
    }
    
    
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Collections;
    
    namespace testHtmlIt
    {
        public partial class Form2 : Form
        {
            int index;
            public Form2()
            {
                InitializeComponent();
            }
            public Form2(int index)
            {
                InitializeComponent();
                this.index = index;
                this.textBox1.Text = class1.arr[index].ToString();// imposto il valore da mofdificare
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                class1.arr[index] = this.textBox1.Text;//effettuo la modifica (ricorda che stiamo simulando un DB
                class1.Riparti = true;//imposto il valore per far ripartire il thread in attesa
                this.Close();
            }
        }
    
        public static class class1//solo per simulare il DB
        {
            static object lockArr;
            static object lockBool;
            static ArrayList arrList;
            static bool riparti;
            public static ArrayList arr 
            {
                get
                {
                    lock (lockArr)
                    {
                        return arrList;
                    }
                }
                set
                {
                    lock (lockArr)
                    {
                        arrList = value;
                    }
                }
            }
            public static bool Riparti
            {
                get
                {
                    lock (lockBool)
                    {
                        return riparti;
                    }
                }
                set
                {
                    lock (lockBool)
                    {
                        riparti = value;
                    }
                }
            }
            static class1()
            {
                lockArr = new object();
                lockBool = new object();
                arr = new ArrayList() { "a", "b", "c", "d", "c", "f", "c" };
                Riparti = false;
            }
        }
    }

  2. #12

  3. #13
    domanda stupida,
    ma per "freezare" il primo form quando si apre il secondo, non basta aprire il secondo "modale"?

    In questo modo fino a che non lo chiudo non posso "accedere" al primo form che sta sotto bloccato (interfaccia e codice).

  4. #14
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,536
    Originariamente inviato da Gluck74
    domanda stupida,
    ma per "freezare" il primo form quando si apre il secondo, non basta aprire il secondo "modale"?

    In questo modo fino a che non lo chiudo non posso "accedere" al primo form che sta sotto bloccato (interfaccia e codice).
    ciao, la domanda non è stupida, anzi... il problema è che se lo fai dentro un ciclo non ottieni nessun risultato.

    ovviamente per questo ho chiesto più volte se dovesse per forza arrestare un ciclo o roba simile del primo form (in pratica prima di uscire dalla routine che chiama il form 2)

    sicuramente l'utilità potrebbe essere quantomeno discutibile, ma solo l'utente conosce i veri motivi di ciò, io mi sono limitato a cercare una soluzione a quanto chiesto (o perlomeno a quanto ho capito che chiedeva)


  5. #15
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    cancellato dall'utente per flood (devi attendre 30 secondi prima di rispondere una seconda volta)
    Per gli Spartani e Sparta usa spartan Il mio github

  6. #16
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,536
    Originariamente inviato da Gluck74
    domanda stupida,
    ma per "freezare" il primo form quando si apre il secondo, non basta aprire il secondo "modale"?

    In questo modo fino a che non lo chiudo non posso "accedere" al primo form che sta sotto bloccato (interfaccia e codice).
    un sacco di fuffa! in effetti rileggendo il post, per quello che deve fare basterebbe come dici tu un semplice showDialog().

    avevi ragione!

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.