IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Vakos
Tvůrce
Avatar
Vakos:23.5.2018 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.5.2018 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.5.2018 13:28

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

Nahoru Odpovědět
23.5.2018 13:28
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Vakos
Tvůrce
Avatar
Odpovídá na Michal Štěpánek
Vakos:23.5.2018 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.5.2018 13:52
Nahoru Odpovědět
23.5.2018 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
Tvůrce
Avatar
Vakos:24.5.2018 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.5.2018 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
Tvůrce
Avatar
Vakos:26.5.2018 18:20

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

Nahoru Odpovědět
26.5.2018 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.