MethodInvoker się nie wykonuje

1

Witam
Mam pewien problem z Invoke (mianowicie z MethodInvoker).
W kodzie mam backgroundWorker, który powinien wykonać się co X * 1000 (gdzie X to wartość trackBar1). Problem jest taki, że ten backgroundWorker się nie wykonuje, bo mam błąd, którego nie potrafię rozwiązać:

int delay = (int)trackBar1.Invoke((MethodInvoker)delegate { delay = trackBar1.Value * 1000; }); ```

Błąd:
Object reference not set to an instance of an object.

1

wewnątrz delegaty masz zwrócić wartość, a nie przypisać do zmiennej.
poza tym warto zawsze sprawdzać InvokeRequired.
ja robię tak:

        int getDelay()
        {
            if (trackBar1.InvokeRequired)
                return (int)trackBar1.Invoke(new Func<int>(getDelay));
            else
                return trackBar1.Value * 1000;
        }
0

Działa elegancko, dziękuję bardzo :)
Jeszcze jedno pytanie: gdy backgroundWorker wykryje zmianę, musi ustawić button1.Enabled = true; oraz button2.Enabled = false;
Mogę to zrobić tak:

Invoke((MethodInvoker)delegate { button1.Enabled = true; button2.Enabled = false; }); ``` czy tak? button1.Invoke((MethodInvoker)delegate { button1.Enabled = true; }); button2.Invoke((MethodInvoker)delegate { button2.Enabled = true; }); ```
0

prawidłowo to drugie, ale takie coś przejdzie:

button1.Invoke((MethodInvoker)delegate
                    {
                        button1.Enabled = true;
                        button2.Enabled = false;
                    });

ale to brzydko wygląda. to może tak:

form1.Invoke((MethodInvoker)delegate
                    {
                        button1.Enabled = true;
                        button2.Enabled = false;
                    });

Tak naprawdę nie ma znaczenia na której kontrolce formy zrobisz Invoke, bo to wszystko to samo.

0

OK :D
Jeszcze mam jeden problem. Po włączeniu aplikacji pobiera ona jakieś 7550K. Po naciśnięciu przycisku START, pobiera ona 9000K i ciągle rośnie :/
START wywołuje wykonywanie się backgroundWorkera. Natomiast backgroundWorker co 1s pobiera źródło strony do textBox2. Czy to może być przyczyną ciągłego rośnięcia K?

0

.Net Framework ma to do siebie, że pożera pamięć tak długo aż zacznie mu jej brakować.
I nie jest to zazwyczaj powodem do zmartwień.
Bez kodu nic więcej powiedzieć nie można.

0

No dobra, postaram się w przyszłości zoptymalizować aplikację :) Bardzo dziękuję za dotychczasową pomoc ;)

Jeszcze jedna rzecz; czy da się zrobić coś takiego, że przy co piątych odwiedzinach strony korzysta z innego proxy?
Coś takiego:
[odwiedziny]
[odwiedziny]
[odwiedziny]
[odwiedziny]
[odwiedziny] / zmiana proxy
[odwiedziny]
[odwiedziny]
[odwiedziny]
[odwiedziny]
[odwiedziny] / zmiana proxy

Mam taką funkcję:

public string VisitURL(string strurl)
{
HttpWebRequest mywebrequest = (HttpWebRequest)WebRequest.Create(strurl);
mywebrequest.Credentials = CredentialCache.DefaultNetworkCredentials;
mywebrequest.ContentType = " text/html";
HttpWebResponse mywebresponse = (HttpWebResponse)mywebrequest.GetResponse();
StreamReader myWebSource = new StreamReader(mywebresponse.GetResponseStream());
string myPageSource = myWebSource.ReadToEnd();
mywebresponse.Close();
return myPageSource;
}


Czy po zmodyfikowaniu jej na:
<code class="c#">
public string VisitURL(string strurl)
{
	HttpWebRequest mywebrequest = (HttpWebRequest)WebRequest.Create(strurl);
	mywebrequest.Credentials = CredentialCache.DefaultNetworkCredentials;
	WebProxy myproxy = new WebProxy("IP:PORT", false);
	mywebrequest.Proxy = myproxy;
	mywebrequest.Method = "GET";
	mywebrequest.ContentType = " text/html";
	HttpWebResponse mywebresponse = (HttpWebResponse)mywebrequest.GetResponse();
	StreamReader myWebSource = new StreamReader(mywebresponse.GetResponseStream());
	string myPageSource = myWebSource.ReadToEnd();
	mywebresponse.Close();
	return myPageSource;
}

Będzie to miało "ręce i nogi"?

1 użytkowników online, w tym zalogowanych: 0, gości: 1