Torna indietro   Hardware Upgrade Forum > Software > Programmazione

BOOX Picco: l'ebook reader minuscolo è una genialata, e si può attaccare allo smartphone
BOOX Picco: l'ebook reader minuscolo è una genialata, e si può attaccare allo smartphone
BOOX ha portato sul mercato Picco, un e-reader da 3,97 pollici che pesa 58 grammi e si aggancia al retro dello smartphone con un anello magnetico. Lo abbiamo usato con Pixel 11 Pro XL e iPhone 18 Pro per capire se un formato così ridotto regga la prova della lettura quotidiana
AMD EPYC Venice: dentro Zen 6, i SoC a 256 core e la sfida al costo della memoria
AMD EPYC Venice: dentro Zen 6, i SoC a 256 core e la sfida al costo della memoria
A Las Vegas AMD ha svelato i dettagli architetturali delle CPU EPYC di sesta generazione, note con il nome in codice Venice. Nuovi core Zen 6 e Zen 6c costruiti a 2 nanometri, fino a 256 core per socket, 16 canali di memoria, interfaccia PCI Express 6.0 e un'intera famiglia di proposte che va da Venice SP7 a Verano. Senza dimenticare la memoria, oggi la voce di costo più pesante in un server: AMD risponde con CXL 3.1 e con la tecnologia software MEXT, che porta la memoria flash dentro la gerarchia della DRAM.
HONOR Pad X9 Max recensione, schermo ultra large a meno di 400 euro
HONOR Pad X9 Max recensione, schermo ultra large a meno di 400 euro
HONOR Pad X9 Max mette un pannello IPS da 13 pollici con risoluzione 2,5K e refresh a 120 Hz davanti a una batteria da 10.100 mAh e a quattro altoparlanti. Il listino parte da 399,90 euro, per un progetto molto chiaro e ambizioso: schermo ampio, buon audio e giornate lontano dalla presa, a un prezzo che non pesa sul portafoglio
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 06-07-2011, 16:36   #1
I24Zi3L
Senior Member
 
Iscritto dal: Mar 2005
Messaggi: 497
[C#]Mettere in pausa il programma

Salve a tutti.

Avrei bisogno di aiuto per sistemare il mio programma.

In pratica il programma fa dei controlli su delle stringhe e a seconda del verificarsi di date condizioni imposta un flag bool a false e apre un nuovo form dove l'utente effettua delle modifiche. Dopo la fine delle modifiche il flag viene impostato a true e chiude il secondo form.

Io vorrei che il form principale si "freezzasse" fintanto che il flag è false.

Dopo un pò di ricerche su internet ho il seguente codice dopo dell'apertura del secondo form:

Codice:
while (flag == false)  {  Threads.Sleep(10000);  }


Ma così all'apertura del secondo form si blocca tutto.

Conoscete un modo migliore per fermare il programma?

Grazie.
I24Zi3L è offline   Rispondi citando il messaggio o parte di esso
Old 06-07-2011, 17:04   #2
Mettiu_
Member
 
L'Avatar di Mettiu_
 
Iscritto dal: Jul 2011
Messaggi: 250
Ciao!
Spero di aver capito bene la problematica...
Hai pensato di usare gli eventi? Se hai due entità (due thread ad esempio) che devono sincronizzarsi nel senso che una deve aspettare che l'altra faccia qualcosa prima di eseguire potresti usare un AutoResetEvent (o ManualResetEvent, dipende da cosa devi fare di preciso)
L' evento lo allochi semplicemente così:
Codice:
AutoResetEvent myEvent = new AutoResetEvent(false);
L'entità che deve attendere invocherà:
Codice:
myEvent.WaitOne();
Quando dall'altra parte vuoi sbloccare il metodo in attesa invochi:
Codice:
myEvent.Set();
Così non hai bisogno del flag da controllare periodicamente...
Può fare al caso tuo?

Riferimenti: http://msdn.microsoft.com/it-it/libr...esetevent.aspx
Mettiu_ è offline   Rispondi citando il messaggio o parte di esso
Old 06-07-2011, 17:43   #3
I24Zi3L
Senior Member
 
Iscritto dal: Mar 2005
Messaggi: 497
Beh non è una cosa semplice da spiegare ma ci provo.

Io ho una ArrayList di stringhe e gli analizzo una ad una per vedere se almeno una di queste ha delle specifiche caratteristiche. Se nessuna ce le ha allora una mia variabile bool, precedentemente settata, rimane true e allora il programma prosegue normalmente. Anche se solo una delle stringhe ha le queste caratteristiche la mia varibile bool viene settata a false e quindi entro in un ciclo if in cui mi apre questo secondo form dove viene letta la stringa non idonea e visualizzata su di un gridview. L'utente modifica la stringa in maniera idonea e preme il tasto che chiude il secondo form.

Ecco, io vorrei che il programma si bloccasse subito dopo aver caricato il secondo form e che attendesse la sua chiusura o che il flag cambiasse stato.

Quindi penso che dovrei bloccare il programma dal primo form ma farlo ripartire nel secondo quando ho finoto le operazioni, chiudo il form e il programma riparte.

Grazie.

Ultima modifica di I24Zi3L : 06-07-2011 alle 17:57.
I24Zi3L è offline   Rispondi citando il messaggio o parte di esso
Old 06-07-2011, 18:05   #4
Mettiu_
Member
 
L'Avatar di Mettiu_
 
Iscritto dal: Jul 2011
Messaggi: 250
Forse postare il pezzo di codice interessato da queste operazioni potrebbe facilitare la comprensione... Da quel che capisco non mi sembra che non si possa fare ciò che ti ho suggerito: basta che quando crei il form gli passi l'handle all'evento precedentemente creato così potrai fare la Set() quando necessario. Non mi è ancora chiaro chi dovrebbe far cambiare di stato la variabile visto che il form attende l'input dall'utente e il programma principale è in attesa che il form esca...
Mettiu_ è offline   Rispondi citando il messaggio o parte di esso
Old 06-07-2011, 18:24   #5
I24Zi3L
Senior Member
 
Iscritto dal: Mar 2005
Messaggi: 497
Ho creato un esempio esemplificativo di quello che vorrei fare:

Ho 2 form. Entrambi con 1 textbox e 1 bottone. Si apre il primo form che il seguente codice nel button1_click:


Codice:
private void button1_Click(object sender, EventArgs e)         
{              

Form2 frm = new Form2();              

frm.Show();              

// Qua io voglio che si blocchi

textBox1.Text = Class1.Testo;                       

}


Si apre il secondo form. Inserisco una stringa a caso nella text box e premo il bottone che ha il seguente codice:



Codice:
private void button1_Click(object sender, EventArgs e)        
{             

Class1.Testo = textBox1.Text;               

Close();          

// Qua io voglio che si sblocchi e che continui da dove l'ho bloccato

}
E quindi sbloccando continua a leggere il codice del bottone del primo form e mi compila la textbox con il valore che ho assegnato alla variabile nella classe usando la textbox del secondo form.

In sostanza vorrei avere questa sequenza:

- Si avvia il primo form
- Premo il bottone
- Carica il secondo form e si blocca
- Scrivo qualcosa nella text box del secondo form
- Il bottone che chiude il secondo form e fa ripartire il primo form
- Mi compila la text box del primo form con la stringa che ho messo nel secondo form

Se riesco a far funzionare l'esempio, funziona anche il progetto perché in sostanza l'idea è quella.

Spero di esser riuscito a spiegarmi.

Grazie per l'aiuto.
I24Zi3L è offline   Rispondi citando il messaggio o parte di esso
Old 06-07-2011, 18:35   #6
Mettiu_
Member
 
L'Avatar di Mettiu_
 
Iscritto dal: Jul 2011
Messaggi: 250
Ok, allora fai così. Questo è il primo form:
Codice:
private void button1_Click(object sender, EventArgs e)         
{              
// Creo l'evento (inizialmente non segnalato)
AutoResetEvent myEvent = new AutoResetEvent(false);
// Creo il form passando l'evento
Form2 frm = new Form2(myEvent);              
frm.Show();              

// Qua io voglio che si blocchi
myEvent.WaitOne();
textBox1.Text = Class1.Testo;                       

}
Sul secondo form invece:
Codice:
private void button1_Click(object sender, EventArgs e)        
{             

Class1.Testo = textBox1.Text;               
// Sblocco il primo form...
this.myEvent.Set();
// ...ed esco!
Close();

}
Ricordati di:
- modificare il costruttore della classe Form2 per fargli accettare un oggetto di tipo AutoResetEvent da mettere in un attributo privato;
- includere il namespace dove è contenuta la classe AutoResetEvent (dovrebbe essere System.Threading se non ricordo male);
- provare !
Mettiu_ è offline   Rispondi citando il messaggio o parte di esso
Old 06-07-2011, 18:48   #7
I24Zi3L
Senior Member
 
Iscritto dal: Mar 2005
Messaggi: 497
Mi da due errori:

Codice:
Errore	1	'WindowsFormsApplication1.Form2' non contiene una definizione di 'myEvent' e non è stato trovato alcun metodo di estensione 'myEvent'che accetta un primo argomento di tipo 'WindowsFormsApplication1.Form2'. Probabilmente manca una direttiva using o un riferimento a un assembly.	C:\Documents and Settings\yiyi.chen\Impostazioni locali\Dati applicazioni\Temporary Projects\WindowsFormsApplication1\Form2.cs	29	18	WindowsFormsApplication1
Codice:
Errore	2	'WindowsFormsApplication1.Form2' non contiene un costruttore che accetta argomenti '1'	C:\Documents and Settings\yiyi.chen\Impostazioni locali\Dati applicazioni\Temporary Projects\WindowsFormsApplication1\Form1.cs	23	25	WindowsFormsApplication1
Penso che si riferiscano al tuo primo memo, purtroppo non sono molto bravo con la teoria ed i termini e quindi non capisco cosa mi hai detto di fare!
I24Zi3L è offline   Rispondi citando il messaggio o parte di esso
Old 06-07-2011, 19:21   #8
Mettiu_
Member
 
L'Avatar di Mettiu_
 
Iscritto dal: Jul 2011
Messaggi: 250
Come ti avevo scritto, devi modificare il costruttore della classe Form2! Diventerà qualcosa del tipo:
Codice:
... // Il resto della classe
private AutoResetEvent myEvent;

public Form2(AutoResetEvent myEvent)
{
      ... // Quello che già c'è lascialo!! E poi aggiungi...
      this.myEvent = myEvent;
}

... // Il resto della classe
Mettiu_ è offline   Rispondi citando il messaggio o parte di esso
Old 06-07-2011, 19:35   #9
I24Zi3L
Senior Member
 
Iscritto dal: Mar 2005
Messaggi: 497
Uhm... Penso di aver capito cosa intendevi ma mi si blocca all'apertura del secondo form.

Aspetto che posto il codice di tutte 3 le classi.

Form1.cs:

Codice:
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.Threading;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            AutoResetEvent myEvent = new AutoResetEvent(false);
            Form2 frm = new Form2(myEvent);
            frm.Show();

            myEvent.WaitOne();
            textBox1.Text = Class1.Testo;
        }
    }
}
Form2.cs:

Codice:
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.Threading;

namespace WindowsFormsApplication1
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        private AutoResetEvent myEvent;

        public Form2(AutoResetEvent myEvent)
        {

            this.myEvent = myEvent;
        }        

        private void button1_Click(object sender, EventArgs e)
        {
            Class1.Testo = textBox1.Text;

            this.myEvent.Set();

            Close();

        }
    }
}
Class1.cs:

Codice:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;

namespace WindowsFormsApplication1
{
    class Class1
    {
        static string lvTesto;

        public static string Testo
        {
            get
            {
                return lvTesto;
            }
            set
            {
                lvTesto = value;

            }
        }       
    }
}
C'è qualcosa che non va?
I24Zi3L è offline   Rispondi citando il messaggio o parte di esso
Old 06-07-2011, 19:54   #10
Mettiu_
Member
 
L'Avatar di Mettiu_
 
Iscritto dal: Jul 2011
Messaggi: 250
Fai queste modifiche!
Form1:
Codice:
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.Threading;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        private AutoResetEvent myEvent;
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            myEvent = new AutoResetEvent(false);
            ThreadStart tStart = new ThreadStart(avviaForm2);
            Thread t = new Thread(tStart);
            t.Start();

            myEvent.WaitOne();
            textBox1.Text = Class1.Testo;
        }
         
        private void avviaForm2()
        {
            Form2 frm = new Form2(myEvent);
            Application.Run(frm);
        }

    }
}
Form2:
Codice:
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.Threading;

namespace WindowsFormsApplication1
{
    public partial class Form2 : Form
    {
        private AutoResetEvent myEvent;

        public Form2(AutoResetEvent myEvent)
        {
            InitializeComponent();
            this.myEvent = myEvent;
        }        

        private void button1_Click(object sender, EventArgs e)
        {
            Class1.Testo = textBox1.Text;

            this.myEvent.Set();

            Close();

        }
    }
}

Ultima modifica di Mettiu_ : 06-07-2011 alle 19:56. Motivo: Errata corrige
Mettiu_ è offline   Rispondi citando il messaggio o parte di esso
Old 07-07-2011, 00:35   #11
Kralizek
Senior Member
 
L'Avatar di Kralizek
 
Iscritto dal: Feb 2003
Città: Stockholm (SE)
Messaggi: 1343
ma usare semplicemente Form.ShowModal?
Kralizek è offline   Rispondi citando il messaggio o parte di esso
Old 07-07-2011, 14:09   #12
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Quote:
Originariamente inviato da Kralizek Guarda i messaggi
ma usare semplicemente Form.ShowModal?
Ma infatti.
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
Old 08-07-2011, 16:40   #13
U235
Member
 
Iscritto dal: Nov 2009
Messaggi: 56
Quote:
Originariamente inviato da Kralizek Guarda i messaggi
ma usare semplicemente Form.ShowModal?
il problema, da che quello che ho capito sia il suo obbiettivo, lui vuole bloccare il thread all'interno del ciclo che itera l'array, e questo fa in modo che venga bloccata l'apertura del form secondario.

un modo l'ho trovato, non so se sia l'unico, il migliore o il peggiore, ma comunque funziona, qui la bozza d'esempio.
__________________
Un elemento come me quando si fissa fa sempre un gran casino, ma solo nel 45 ciò è stato negativo . Little Boy era mio nonno
U235 è offline   Rispondi citando il messaggio o parte di esso
Old 08-07-2011, 17:17   #14
Kralizek
Senior Member
 
L'Avatar di Kralizek
 
Iscritto dal: Feb 2003
Città: Stockholm (SE)
Messaggi: 1343
Quote:
Originariamente inviato da I24Zi3L Guarda i messaggi
Salve a tutti.

Avrei bisogno di aiuto per sistemare il mio programma.

In pratica il programma fa dei controlli su delle stringhe e a seconda del verificarsi di date condizioni imposta un flag bool a false e apre un nuovo form dove l'utente effettua delle modifiche. Dopo la fine delle modifiche il flag viene impostato a true e chiude il secondo form.

Io vorrei che il form principale si "freezzasse" fintanto che il flag è false.

Dopo un pò di ricerche su internet ho il seguente codice dopo dell'apertura del secondo form:

Codice:
while (flag == false)  {  Threads.Sleep(10000);  }


Ma così all'apertura del secondo form si blocca tutto.

Conoscete un modo migliore per fermare il programma?

Grazie.
Quote:
Originariamente inviato da U235 Guarda i messaggi
il problema, da che quello che ho capito sia il suo obbiettivo, lui vuole bloccare il thread all'interno del ciclo che itera l'array, e questo fa in modo che venga bloccata l'apertura del form secondario.

un modo l'ho trovato, non so se sia l'unico, il migliore o il peggiore, ma comunque funziona, qui la bozza d'esempio.
secondo me dall'open post lui vuole semplicemente che la finestra padre non sia utilizzabile finché la finestra figlia non ha raccolto i valori richiesti.

Addirittura, assegnando i valori appropriati a due pulsanti, si puó usare ShowDialog

Codice:
string name, password;
DialogForm frm = new DialogForm();
if (frm.ShowDialog() == DialogResult.OK)
{    
     name = frm.Name;
     password = frm.Password;
}
http://msdn.microsoft.com/en-us/library/c7ykbedk.aspx
Kralizek è offline   Rispondi citando il messaggio o parte di esso
Old 08-07-2011, 17:41   #15
U235
Member
 
Iscritto dal: Nov 2009
Messaggi: 56
Quote:
Originariamente inviato da Kralizek Guarda i messaggi
secondo me dall'open post lui vuole semplicemente che la finestra padre non sia utilizzabile finché la finestra figlia non ha raccolto i valori richiesti.

Addirittura, assegnando i valori appropriati a due pulsanti, si puó usare ShowDialog

Codice:
string name, password;
DialogForm frm = new DialogForm();
if (frm.ShowDialog() == DialogResult.OK)
{    
     name = frm.Name;
     password = frm.Password;
}
http://msdn.microsoft.com/en-us/library/c7ykbedk.aspx
ho cercato di chiedere chiarimenti, ma non mi ha risposto, e basandomi su ciò che ha detto nell'altro thread aperto, vuole iterare un array, e dentro, quando trova una "anomalia" passarlo al form secondario, se così fosse (rimango in attesa di chiarimenti), non sarebbe possibile aprire semplicemente il form dentro il ciclo e interromperlo e farlo ripartire dopo la modifica, se non agendo a livello di thread.

ho pensato che fosse dentro un ciclo perchè parlav di array e while.
__________________
Un elemento come me quando si fissa fa sempre un gran casino, ma solo nel 45 ciò è stato negativo . Little Boy era mio nonno
U235 è offline   Rispondi citando il messaggio o parte di esso
Old 09-07-2011, 13:01   #16
3nigma666
Senior Member
 
L'Avatar di 3nigma666
 
Iscritto dal: Jan 2005
Città: A casa mia
Messaggi: 825
basta usare showdialog(), fa tutto lui!
3nigma666 è offline   Rispondi citando il messaggio o parte di esso
Old 09-07-2011, 16:38   #17
U235
Member
 
Iscritto dal: Nov 2009
Messaggi: 56
Quote:
Originariamente inviato da 3nigma666 Guarda i messaggi
basta usare showdialog(), fa tutto lui!
dipende da come deve gestire la cosa, prova a fare questo :

Codice:
 public Form1()
        {
            InitializeComponent();
            test();
        }
        public Form1(int i)
        {
            InitializeComponent();
        }
        void test()
        {
            for (int i = 0; i < 5; i++)
            {
                new Form1(1).ShowDialog();
            }
        }
__________________
Un elemento come me quando si fissa fa sempre un gran casino, ma solo nel 45 ciò è stato negativo . Little Boy era mio nonno
U235 è offline   Rispondi citando il messaggio o parte di esso
Old 09-07-2011, 16:57   #18
U235
Member
 
Iscritto dal: Nov 2009
Messaggi: 56
Quote:
Originariamente inviato da U235 Guarda i messaggi
dipende da come deve gestire la cosa, prova a fare questo :

Codice:
 public Form1()
        {
            InitializeComponent();
            test();
        }
        public Form1(int i)
        {
            InitializeComponent();
        }
        void test()
        {
            for (int i = 0; i < 5; i++)
            {
                new Form1(1).ShowDialog();
            }
        }
anche se comunque devo ammettere che così non funziona indipendentemente dal ciclo.
mentre se lo avvi a mano (click del mouse ad esempio) va.
__________________
Un elemento come me quando si fissa fa sempre un gran casino, ma solo nel 45 ciò è stato negativo . Little Boy era mio nonno
U235 è offline   Rispondi citando il messaggio o parte di esso
Old 09-07-2011, 17:32   #19
U235
Member
 
Iscritto dal: Nov 2009
Messaggi: 56
oggi me la canto e me la suono! rileggendo bene il post, è vero, per quello che vuole ottenere è decisamente meglio un semplice showDialog().

tanto lui lo farebbe partire al click del mouse.
__________________
Un elemento come me quando si fissa fa sempre un gran casino, ma solo nel 45 ciò è stato negativo . Little Boy era mio nonno
U235 è offline   Rispondi citando il messaggio o parte di esso
Old 10-07-2011, 20:04   #20
3nigma666
Senior Member
 
L'Avatar di 3nigma666
 
Iscritto dal: Jan 2005
Città: A casa mia
Messaggi: 825
Quote:
Originariamente inviato da U235 Guarda i messaggi
oggi me la canto e me la suono! rileggendo bene il post, è vero, per quello che vuole ottenere è decisamente meglio un semplice showDialog().

tanto lui lo farebbe partire al click del mouse.

3nigma666 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


BOOX Picco: l'ebook reader minuscolo è una genialata, e si può attaccare allo smartphone BOOX Picco: l'ebook reader minuscolo è un...
AMD EPYC Venice: dentro Zen 6, i SoC a 256 core e la sfida al costo della memoria AMD EPYC Venice: dentro Zen 6, i SoC a 256 core ...
HONOR Pad X9 Max recensione, schermo ultra large a meno di 400 euro HONOR Pad X9 Max recensione, schermo ultra large...
Lenovo ThinkPad X1 Carbon Gen 14: il business ultraleggero si rinnova dall’interno Lenovo ThinkPad X1 Carbon Gen 14: il business ul...
Jabra Evolve3 85: le cuffie sia per l'intrattenimento che per il lavoro Jabra Evolve3 85: le cuffie sia per l'intratteni...
Google lancia il nuovo Pixel Tag e rivol...
Google DeepMind presenta AlphaGenome 2: ...
Questa e-bike da 26" su AliExpress costa...
Tre continenti, due oceani, zero scali: ...
Google Pixel 11 crolla a 629€ su Amazon,...
ByteDance prepara la risposta a Meta Mus...
Amazon taglia di circa 100€ il prezzo di...
Un eccellente treppiede in carbonio a ci...
DJI Osmo Action 5 Pro, super prezzo su A...
Terremoto NVIDIA: Jensen Huang rischia i...
Spopola su Amazon, giustamente: ECOVACS ...
Una city e-bike imbattibile: costa 559€ ...
Nuovi articoli ogni ora: sconto EXTRA de...
5 tablet in super offerta, uno su Amazon...
3 Smart TV Haier da 65 pollici QLED a pa...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 09:33.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v