C# tekst van een website krijgen

Status
Niet open voor verdere reacties.
Ja dat werkt wel want dat gebruik je al.
Je gebruikt dit soort dingen zo vaak dat je dan moet denken aan een class die dit automatisch doet zodat je niet steeds dezelfde code hoeft te schrijven.


Je zou eens kunnen beginnen met zoiets: (code in notepad, werkt mogelijk niet maar gaat om het idee)
[CPP]public class ProtocolDataManager
{
private string _filename = "protocols.xml";

public List<protocol> LoadProtocols()
{
var serializer = new DataContractSerializer(typeof(List<Protocols>));
var folder = ApplicationData.Current.LocalFolder;

using (var stream = await folder.OpenStreamForReadAsync(_filename))
{
return serializer.ReadObject(stream) as List<Protocols>;
}
}

public void SaveProtocols(List<Protocols> protocols)
{
var serializer = new DataContractSerializer(typeof(List<Protocols>));
var folder = ApplicationData.Current.LocalFolder;

using (var stream = await folder.OpenStreamForWriteAsync(_filename))
{
serializer.WriteObject(stream, protocols); //gebruikt deze code nooit maar zal zoiets zijn, je weet wel wat het moet zijn
}
}
}[/CPP]

gebruik:
[CPP]
var data = new ProtocolDataManager();
var protocolList = data.LoadProtocols();[/CPP]




Later kun je met het gebruik van generics één class maken die dit soort dingen doet en dan geef je het type door in de constructor van de class en de naam van de file:
[CPP]
var data = new DataManager(typeof(List<Protocol>));
var protocolList = data.LoadData("protocols.xml');[/CPP]

of
[CPP]
var data = new DataManager(typeof(List<Favorite>));
var favoriteList = data.LoadData("favorites.xml');[/CPP]

dan schrijf je de code dus 1x en kun je de class overal en altijd her-gebruiken, scheelt een hoop tijd
 
Heb het iets anders gedaan maar het werkt nu. :D

Ik wil nu aan mijn app voor school een live tile toevoegen, waarop je je rooster kan zien. Alleen ik weet niet hoe ik een custom live tile kan maken en die update. Ik heb al op internet rond gezocht maar kan niet echt iets vinden weet jij sites waarop ik er iets over kan vinden?
 
Dat is ook weer gelukt alleen moet ik nu nog een backgroudagent gebruiken om de tile te updaten
 
Ik heb nog een vraagje

Ik ben bezig met een onofficiële dubsmash app voor Windows Phone en daarbij wil ik dan een filmpje opnemen met de microfoon gemuted en terwijl je filmt het gekozen geluidsfragment afspelen.

Ik heb al dat je kan filmen en dat je een geluidsfragment kan afspelen. Maar nu is het dat als je begint met opnemen dat het geluidsfragment stopt. Hoe kan ervoor zorgen dat dat niet zo is?

En hoe zorg ik ervoor dat de microfoon gemute wordt?

Alvast bedankt!
 
Weet ik zo 1,2,3 niet. Zou je even de WP8.1 documentatie moeten doorlezen.
(of een nieuwe vraag posten misschien dat iemand anders het zo weet)
 
Hallo,

allereerst wil ik je nog heel erg bedanken voor alle hulp. Ik heb in totaal nu meer dan 12.000 downloads ! :D Allemaal dankzij jou hulp

Maar nu heb ik nog een vraagje. Ik wil graag Background tasks toevoegen aan mijn formule 1 om een notificatie te laten wie de race heeft gewonnnen. Een background task toevoegen dat lukt me wel, maar als ik dan in die background task dingen zet om data te downloaden wie er heeft gewonnen, dan geeft ie verschillende errors in de debugger

Code:
Error	6	Method 'DownloadData.Data.Downloader.DownloadResultsAsync(System.String)' has a parameter of type 'System.Threading.Tasks.Task<System.Collections.Generic.List<Formula1.Results>>' in its signature. Although this generic type is not a valid Windows Runtime type, the type or its generic parameters implement interfaces that are valid Windows Runtime types.  Consider changing the type 'Task' in the method signature to one of the following types instead: Windows.Foundation.IAsyncAction, Windows.Foundation.IAsyncOperation, or one of the other Windows Runtime async interfaces. The standard .NET awaiter pattern also applies when consuming Windows Runtime async interfaces. Please see System.Runtime.InteropServices.WindowsRuntime.AsyncInfo for more information about converting managed task objects to Windows Runtime async interfaces. Consider changing the type 'System.Collections.Generic.List<T>' in the method signature to one of the following types instead: 'System.Collections.Generic.IList<T>, System.Collections.Generic.IReadOnlyList<T>, System.Collections.Generic.IEnumerable<T>'.	C:\Users\han\Documents\Visual Studio 2013\Projects\Formula1\BackgroundAgent\Downloader.cs	391	42	BackgroundAgent
Code:
Error	9	Metadata file 'C:\Users\han\Documents\Visual Studio 2013\Projects\Formula1\BackgroundAgent\bin\Debug\BackgroundAgent.winmd' could not be found	C:\Users\han\Documents\Visual Studio 2013\Projects\Formula1\Formula1\CSC	Formula1 (Formula1\Formula1\Formula1)
Code:
Error	2	A public type has a namespace ('Formula1') that shares no common prefix with other namespaces ('DownloadData.Data'). All types within a Windows Metadata file must exist in a sub namespace of the namespace that is implied by the file name.	C:\Users\han\Documents\Visual Studio 2013\Projects\Formula1\BackgroundAgent\WINMDEXP	BackgroundAgent

Zou jij me hier mee kunnen helpen?

Alvast bedankt,

Han Swinkels
 
Ik kan alleen even kijken hoe het in wp8 was omdat ik deze nog niet in wp8.1 gebruikt.

Je moet je de background agent aan appmanifest (met de hand xml aanpassen) en de reference toevoegen aan je phone project (rechtermuis op references> add > solution > backgroundagent project).
Zoiets toevoegen aan tasks was het in wp8 denk dat dit nog wel hetzelfde is
Code:
<Tasks>
  <ExtendedTask Name="WinnerNotificationTask">
    <BackgroundServiceAgent Name="WinnerNotification" Specifier="ScheduledTaskAgent" Source="Formula1.BackgroundAgent" Type="Formula1.BackgroundAgent.ScheduledAgent" />
  </ExtendedTask>
</Tasks>


Met de ScheduledActionService.LaunchForTest method kunt je tijdens het debuggen de background agent eenvoudig testen dan laat je hem elke 60 sec. afgaan ofzo en toon je gewoon even een test berichtje in de notificatie ofzo.

Code:
if (Debugger.IsAttached)
{
    ScheduledActionService.LaunchForTest("WinnerNotification", TimeSpan.FromSeconds(60));
}


Ik kan niet testen nu omdat ik aan het verbouwen/verhuizen ben.

Als de test notificatie werkt zal het ophalen van wat data wel lukken, mogenlijk staan in de method wat dingen die je niet kunt aanroepen in de background agent, dat is dat een volgende stap.

https://msdn.microsoft.com/en-us/library/windows/apps/hh202962(v=vs.105).aspx
 
Het grootste probleem voor mij is denk ik dat ik geen Tasks kan gebruiken, want die gebruik ik om alles te downloaden
 
Probeer eens het async gedeelte eruit te slopen en in plaats van Task<X> alleen X terug te geven. Eventueel met een event dat de data terug geeft in plaats van de method.

Post eventueel even de method.
 
Dat async eruit halen lukt nog niet echt, maar nu heb ik een ander klein probleem


Ik heb een lijst met nieuws en als je die refresht wil ik dat ie alleen het nieuwe nieuws toevoegen, dat iig niet de hele lijst vernieuwt hoeft te worden.
[CPP]
var extranews= new List<News>();

extranews= await downloader.DownloadExtraNews();
if (extranews.Count() == 0)
{
}
else
{
foreach (var item in extranews)
{
newsList.Items.Add(item);
}

}
[/CPP]

Als ik dit debug dan crasht ie bij newsList.Items.Add(item);
newsList is hierin een listview

dit geeft ie vervolgens als Exception:

Code:
System.Exception: Catastrophic failure (Exception from HRESULT: 0x8000FFFF (E_UNEXPECTED))
   at System.Runtime.InteropServices.WindowsRuntime.IVector`1.Append(T value)
   at System.Runtime.InteropServices.WindowsRuntime.VectorToCollectionAdapter.Add[T](T item)
 
Roep je dit mogelijk aan voordat de newslist listview is aangemaakt of probeer je dit in je background task?
 
met de code hierboven is in principe niets verkeerd, je gebruikt dit op meerdere plaatsen toch?

als je alleen nieuwe items wilt toevoegen moet je gewoon even kijken of het nieuws item er al is, zo niet dat voeg je het toe (of met de Insert method om het nieuwe item boven in de lijst te zetten)
 
Hij blijft gewoon crashen op dat deel, maar het is ook niet geheel noodzakelijk.

Maar om even terug te komen op mijn vraag over async in background tasks

Ik wil na de race de resultaten ophalen en dan een notificatie verzenden wie er gewonnen heeft.

Deze method gebruik ik om de resultaten te downloaden:

[CPP] public async Task<List<Results>> DownloadResultsAsync(string resulturl)
{
using (var filter = new HttpBaseProtocolFilter())
using (var client = new Windows.Web.Http.HttpClient(filter))
{
client.DefaultRequestHeaders.UserAgent.ParseAdd("Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/5.0)");
var source = await client.GetStringAsync(new Uri(resulturl));
var doc = CreateDocument(source);

var lijst = new List<Results>();

var Nodes = SelectNode(doc.DocumentNode, "div", "class", "content_block").Descendants("div").Skip(1);

int i = 2;
int findex;

for (findex = 0; findex < 22; findex++)
{

try
{
var Place = Nodes.First().Descendants("div").Skip(i).First().InnerText.Trim();
Debug.WriteLine(Place);
var Coureur = Nodes.First().Descendants("div").Skip((i + 1)).First().InnerText.Trim();
Debug.WriteLine("OK2");
var Team = Nodes.First().Descendants("div").Skip((i + 2)).First().InnerText.Trim();
Debug.WriteLine("OK3");
var Time = Nodes.First().Descendants("div").Skip((i + 3)).First().InnerText.Trim();
Debug.WriteLine("OK4");

if (Place == "0")
{
Time = "RETIRED";
}

i += 6;
lijst.Add(new Results(Place, Coureur, Team, Time));
}
catch
{
break;
}

}

return lijst;
}


}
[/CPP]
 
Laatst bewerkt:
Ok, ik heb met succes zelf wat testjes gedaan (niet met deze code hierboven).

vraag: waar staat deze method?

Kun je eens je code van je background task run method posten?
 
Kwam erachter dat ik in een C# background task gewoon async methods kan gebruiken wat in een C++ background task niet kan. Dus ik denk dat ik nu wel weer verder kan :D

Te vroeg gejuicht toen ik de backgroundtask aan mijn windows phone project linkte begonnen de errors weer te komen die ik eerder aan heb gegeven.

Oke het is nu gelukt de Tasks weg te halen, ik hoef eigenlijk toch geen lijsten op te halen in de background task dus kon ik ze weglaten. Maar nu houd ik de volgende 2 errors over.

2errors.png
 
Laatst bewerkt:
Die zijn nu ook weer verdwenen, maar nu heb ik daarvoor weer 46 errors in de plaats gekregen

veelerrors.png

Kan dat te maken hebben omdat al deze classes ook mijn shared project staan?

Solution gecleaned en alle errors verdwenen als sneeuw voor de zon.

Eindelijk! :D


Alleen als ik de BackgroundTask debug dan komt ie niet voorbij dit

[CPP] XDocument doc = XDocument.Load("Database/AllRaces.xml");
[/CPP]

Opgelost http://stackoverflow.com/questions/25279126/read-xml-file-in-windows-phone-8-1-background-task

Nu komt ie niet voorbij dit en geeft ie een System.Execption
[CPP] var source = await client.GetStringAsync(new Uri(url));
[/CPP]
 
Laatst bewerkt:
hmm, onjuiste url?

lastig een fout te zoeken in een regel waar de code gewoon goed is :p
 
Url klopt als het goed is, het rare is dat de code wel in de app zelf werkt maar niet in de backgroundtask. Dat was precies hetzelfde met xDocument.Load , dat werkte ook niet in de background task maar wel in de app zelf.
 
Ja zoals ik al zei, de code is goed. Kun je de background class posten en wat de precies de exception is?

Ik ben begonnen met alleen debug.writelines in de code om te kijken of alles werkt, en toen heb ik pas code toegevoegd die wat source async download en dat werkte. (overigens met dezelfde code dus er is iets anders wat in de weg zit)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan