det jag vill göra är att ladda en sor text fil ca 7Mb. Detta tar sin lilla stund.Så jag vill att programmet skall visa en progressbar. Kika på Invoke och InvokeRequired, Winforms kontroller får inte anropas från bakgrundstrådar. Jag tror att backgroundworkern har någon metod + event för att skicka saker från arbetstråden till huvudtråden. Typ progress eller report eller något sådant. Om du ska kunna ha en progressbar måste du i förväg veta exakt hur många rader det är i filen. I alla fall om du läser in rad för rad som nu istället för byte för byte. ..eller så läser du upp dej på asynkront I/O http://msdn.microsoft.com/en-us/library/kztecsys.aspx även om exemplet på just den sidan kanske inte är det bästa..tråda en streamreader
Problemet blir att programmet löser sig tills filen är laddad.
Jag tänkte då lägga detta in tråd och låta det köra i bakgrunden. Problemet är att streamreader är en tråd med sp jag får fel när jag sörsöker komma åt streamreadern.
<code>
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
string path = (@"c:\swedish.txt");
using (StreamReader sr = new StreamReader(@"c:\swedish.txt", Encoding.GetEncoding(1252), true))
{
for (String Line = sr.ReadLine(); Line != null; Line = sr.ReadLine())
{
textBox3.Text = textBox3.Text + Line;
System.Threading.Thread.Sleep(1000);
}
}
e.Result = 100;
}
text3.text = text3.text + Line; ger mig ett fel som säger att källan till text3 kommer från en tråd och kan inte accessas.
någon lössing på detta?
</code>Sv: tråda en streamreader
Jag hade nog lagt upp det lite annorlunda hursomhelst, känns lite skevt att din bakgrundstråd ska ha en referens till en gui-komponent.Sv:tråda en streamreader
Annars, som sagt, Invoke, eller BeginInvoke (och ev. EndInvoke.) För att snygga till det lite så kan du skapa en liten metod som heter typ UpdateStatus(string status); eller liknande, och låta den i sin tur sköta invokeSv: tråda en streamreader
Du kan troligen på ett enklare sätt få till allt detta genom att göra allt i UI-tråden och slänga in en:
Application.DoEvents()
Annars är Invoke-metoderna vad jag brukar rekommendera.Sv: tråda en streamreader