Předvánoční Black Friday Předvánoční Black Friday
Až 80% zdarma! Předvánoční BLACK FRIDAY akce. Více informací
Avatar
Vakos
Redaktor
Avatar
Vakos:23. května 13:11

Ahoj,

dělám na appce, která po spuštění načte IP adresy proxy serveru a podle počtu vytvoří počet vláken s novým Form. Prvek prohlížeče dělám pomocí CefSharp, kde lze jednoduše nastavit proxy. Vypadá to nějak takto:

CefSettings settings = new CefSettings();
settings.CefCommandLineArgs.Add("proxy-server", ip);
Cef.Initialize(settings);

Vše funguje v jednom oknu. Spojení se napojí na IP adresu proxy serveru. Problém ale začíná u více oken. Vždy to skončí chybou na řádku

Cef.Initialize(settings);

Píše to, že inicializace smí být provedena pouze 1x. Jde to nějak obejít? Tedy například, aby každé vlákno bylo jako nezávislý program? Nebo je nějaké jiné řešení jak by se toto dalo obejít?

Je mi jedno, jestli se využije CefSharp či nějaká alternativa, jde mi čistě o funkčnost. Požadavek ale je podpora JS.

Odpovědět 23. května 13:11
"Jediný způsob, jak dělat skvělou práci, je milovat to, co děláte. Pokud jste to ještě nenašli, hledejte dál. Ne...
Avatar
Odpovídá na Vakos
Michal Štěpánek:23. května 13:28

A čím to spouštíš v těch různých vláknech?

Nahoru Odpovědět 23. května 13:28
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Vakos
Redaktor
Avatar
Odpovídá na Michal Štěpánek
Vakos:23. května 13:51

Aktuálně vlákna tvořím takto:

var t = new Thread(() => CreateNewWindow(id, ip, url));
t.SetApartmentState(ApartmentState.STA);
t.Start();

Metoda CreateNewWindow vytvoří nový form a předá parametry jako id, ip a url.

V novém Formu vše inicializuji v konstruktoru pomocí kódu

public ChromiumWebBrowser chromeBrowser;
private void InitializeChromium(string ip, string url)
{
    CefSettings settings = new CefSettings();

    settings.CefCommandLineArgs.Add("proxy-server", ip);

    Cef.Initialize(settings);

    // Create a browser component
    chromeBrowser = new ChromiumWebBrowser("http://www.mojeip.cz/");
    //chromeBrowser = new ChromiumWebBrowser(url);
    // Add it to the form and fill it to the form window.
    this.Controls.Add(chromeBrowser);
    chromeBrowser.Dock = DockStyle.Fill;
    chromeBrowser.BringToFront();
}
Editováno 23. května 13:52
Nahoru Odpovědět 23. května 13:51
"Jediný způsob, jak dělat skvělou práci, je milovat to, co děláte. Pokud jste to ještě nenašli, hledejte dál. Ne...
Avatar
Vakos
Redaktor
Avatar
Vakos:24. května 9:35

Zjistil jsem, že když spustím program 2x a každému přiřadím jiný proxy server, tak vše funguje. Řešení, které mě napadá, že by mělo fungovat je oddělit jednotlivé vlákna od zbytku, tedy aby tam nebyly nějaké závislosti, tak aby šlo v každém vlákně provést inicializaci. Nevím ale jak to provést.

Pokud ale víte o nějakém lepším, co vyřeší můj problém, tak budu moc rád za každou radu.

Nahoru Odpovědět 24. května 9:35
"Jediný způsob, jak dělat skvělou práci, je milovat to, co děláte. Pokud jste to ještě nenašli, hledejte dál. Ne...
Avatar
Vakos
Redaktor
Avatar
Vakos:26. května 18:20

Nemá někdo nápad jak by se dal řešit tento problém?

Nahoru Odpovědět 26. května 18:20
"Jediný způsob, jak dělat skvělou práci, je milovat to, co děláte. Pokud jste to ještě nenašli, hledejte dál. Ne...
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.