Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von R3turnz
Thema: Warum wurde myCSharp mit PHP erstellt?
Am im Forum: Smalltalk

Hallo,
heute eine reinen Interessenfrage. Warum habt ihr euch entschieden, diese Seite in PHP zu schreiben? Bei einem C# Forum wäre ASP.NET doch die nahe liegende Wahl. Also woran saht ihr die Vorteile?

Thema: Fenster wird auf kleinerem Bildschirm abgeschnitten
Am im Forum: GUI: WPF und XAML

@MrSparkle

Zitat
Was genau meinst du mit "fast ohne"? Entweder hast du Angaben gemacht, oder du hast die Default-Werte benutzt. Aber wie machst du "fast keine" Angaben?
Ich skaliere nur einige Icons und Bilder auf einheitliche Größen.

Hier der gekürzte Code:
<metro:MetroWindow
    x:Class="OpenWeather.GUI.Views.MainWindow"
    <!-- ... -->
    Title="{x:Static properties:Resources.Title}" MinHeight="750" Height="750" MinWidth="600" Width="600"
    RightWindowCommandsOverlayBehavior="HiddenTitleBar">
    <metro:MetroWindow.Resources>
        <BooleanToVisibilityConverter x:Key="BoolToVisibiltyConverter" />
        <converters:EnumLocalizationConverter x:Key="EnumLocalizationConverter" />
    </metro:MetroWindow.Resources>
    <!-- Flyouts und Event Bindings -->
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="Auto" />
            <RowDefinition Height="Auto" />
            <RowDefinition Height="Auto" />
            <RowDefinition Height="*" />
            <RowDefinition Height="*" />
            <RowDefinition Height="3*" />
            <RowDefinition Height="3*" />
        </Grid.RowDefinitions>
        <ProgressBar IsIndeterminate="True"
                     Visibility="{Binding IsBusy, Converter={StaticResource BoolToVisibiltyConverter}}" Height="20" />
        <TextBlock DataContext="{Binding Location}" FontSize="20" Grid.Row="1">
            <TextBlock.Text>
                <MultiBinding StringFormat="{}{0},{1}" FallbackValue="-,-">
                    <Binding Path="City" FallbackValue="-" />
                    <Binding Path="Region.DisplayName" FallbackValue="-" />
                </MultiBinding>
            </TextBlock.Text>
        </TextBlock>
        <DockPanel DataContext="{Binding CurrentWeather.Weather}" Grid.Row="2">
            <TextBlock DockPanel.Dock="Right" Text="{Binding TempUnit}"
                       Margin="10" />
            <TextBlock DockPanel.Dock="Left"
                       Text="{Binding Temperature, FallbackValue='-'}"
                       FontSize="30" />
        </DockPanel>
        <DockPanel Grid.Row="3">
            <Image DockPanel.Dock="Left" Source="{Binding CurrentWeather.Icon}" Height="75" Width="75"
                   Stretch="Uniform" />
            <TextBlock DockPanel.Dock="Right" DataContext="{Binding CurrentWeather.Weather}" TextAlignment="Left"
                       FontSize="20">
                <TextBlock.Text>
                    <MultiBinding StringFormat="{}{0} ({1})" FallbackValue="- (-)">
                        <Binding Path="Condition" Converter="{StaticResource EnumLocalizationConverter}" />
                        <Binding Path="Description" />
                    </MultiBinding>
                </TextBlock.Text>
            </TextBlock>
        </DockPanel>
        <Grid DataContext="{Binding SunCycle}" Grid.Row="4">
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto" />
                <RowDefinition Height="*" />
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition />
                <ColumnDefinition />
            </Grid.ColumnDefinitions>
            <StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
                <Path Fill="Black" Height="25" Width="25"
                      Data="" />
                <TextBlock Text="{x:Static properties:Resources.Sunrise}" />
            </StackPanel>
            <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Grid.Column="1">
                <Path Fill="Black" Height="25" Width="25"
                      Data="" />
                <TextBlock Text="{x:Static properties:Resources.Sunset}" />
            </StackPanel>
            <TextBlock Text="{Binding Sunrise.TimeOfDay}" Grid.Row="1" />
            <TextBlock Text="{Binding Sunset.TimeOfDay}" Grid.Row="1" Grid.Column="1" />
        </Grid>
        <Grid DataContext="{Binding CurrentWeather.Weather}" Grid.Row="5">
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto" />
                <RowDefinition Height="*" />
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition />
                <ColumnDefinition />
                <ColumnDefinition />
            </Grid.ColumnDefinitions>
            <StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
                <Path Fill="" />
                <TextBlock Text="{x:Static properties:Resources.Humidity}" />
            </StackPanel>

            <TextBlock Grid.Row="1" Text="{Binding Humidity, FallbackValue='-', StringFormat={}{0} %}" FontSize="20" />
            <TextBlock Grid.Column="1" Text="{x:Static properties:Resources.Pressure}" />
            <TextBlock Grid.Row="1" Grid.Column="1" Text="{Binding Pressure,FallbackValue='-', StringFormat={}{0} hPa}"
                       FontSize="20" />
            <StackPanel Grid.Column="2" Orientation="Horizontal" HorizontalAlignment="Center">
                <Path Fill="Black" Height="25" Width="25"
                      Data="" />
                <TextBlock Text="{x:Static properties:Resources.WindSpeed}" />
            </StackPanel>
            <TextBlock Grid.Column="2" Grid.Row="1"
                       Text="{Binding WindSpeed,FallbackValue='-', StringFormat={}{0} meter/sec}" FontSize="20" />
        </Grid>
        <ListBox ItemsSource="{Binding DailyForecast}"
                 SelectedItem="{Binding SelectedForecastDay, Mode=OneWayToSource, UpdateSourceTrigger=PropertyChanged}"
                 Grid.Row="6">
        <!-- ... -->
        </ListBox>
        <ListBox ItemsSource="{Binding HourlyForecastAtSelectedDay}" Grid.Row="7">
        <!-- ... -->
        </ListBox>
    </Grid>
</metro:MetroWindow>

Thema: Fenster wird auf kleinerem Bildschirm abgeschnitten
Am im Forum: GUI: WPF und XAML

Hallo,
das Fenster ist ohne Canvas und fast ohne explizite Angaben von Width und Height erstellt. Auf einem größeren Bildschirm ist auch alles wie gewollt angezeigt, auf einem kleinen Notebook wird aber ein Teil abgeschnitten. Bisher dachte ich WPF ist Auflösungsunabhänig. Die eingestellte Mindestgröße müsste doch auf dem kleinen Bildschirm herunterskaliert werden... Wieso kann das nicht so sein?

Thema: Dreieck an Ende von ArcSegment zeichnen
Am im Forum: GUI: WPF und XAML

Hallo,
ich möchte ein Neuladen-Symbol zeichnen, habe schon den Bogen und muss nun noch ein Dreieck an das obere Ende des ArcSegment anhängen:


                        <Path Stroke="Black" HorizontalAlignment="Center">
                            <Path.Data>
                                <PathGeometry>
                                    <PathFigure StartPoint="0,20">
                                        <PathFigure.Segments>
                                            <ArcSegment Point="0,10" Size="10,10" SweepDirection="CounterClockwise" IsLargeArc="True"/>
                                        </PathFigure.Segments>
                                    </PathFigure>
                                </PathGeometry>
                            </Path.Data>
                        </Path>
Wie kann ich ein soetwas zeichnen?

Thema: Build-Script für C# Anwendung
Am im Forum: Grundlagen von C#

Hallo,
ich wollte das Kompilieren, Kopieren von Datein usw. automatisieren. Ich habe dafür ein Bash-Script geschrieben, finde aber für C# garnichts an dem ich mich orientieren könnte. Was müsste das Script neben xbuild noch alles ausführen? Wie kann ich zum Beispiel Nugetpackete installieren?

Thema: Projekt: Wetter via Konsole und Desktop
Am im Forum: Projekte

Version 1.4 veröffentlicht

Änderungen
-Automatische Aktualisierung des Wetters beim Start
-About-Fenster mit Lizenzen der verwendeten Open Source Bibliotheken
-Fehlerbehebungen und kleinere Verbesserungen

Download
Kann auf der "Projektseite" heruntergeladen werden.

Das Projekt ist nun auf dem Desktop und in der Konsole komplett. Ich werde das Projekt wahrscheinlich auch noch auf Android portieren.

Thema: Assembly-Icon statt Windows-Icon binden
Am im Forum: GUI: WPF und XAML

Nach längerem bin ich auf folgende Lösung gekommen: (Dafür muss das Icon als Ressource kompiliert werden)


       <Image Source="pack://application:,,,/Properties/Application.ico"/>

Thema: Assembly-Icon statt Windows-Icon binden
Am im Forum: GUI: WPF und XAML

Hallo,
ich möchte an das Assembly-Icon. nicht das Window-Icon, als Image anzeigen. Wie lässt sich das umsetzen?

Thema: Wie komplexe Parse-Methode testen
Am im Forum: Rund um die Programmierung

Danke, es sieht auf jeden Fall übersichtlicher aus. Gibt es eine Möglichkeit so auch Json Arrays zu erstellen?

Thema: Wie komplexe Parse-Methode testen
Am im Forum: Rund um die Programmierung

Hallo,
ich habe simplere Parsing-Methoden immer mit Linq to Json getestet:


        public static IEnumerable<object[]> LocationResponsesWithInvalidRegion
        {
            get
            {
                yield return new object[] { new JObject(new JProperty("name", "Stuttgart"), new JProperty("country", "dee")).ToString() };
                yield return new object[] { new JObject(new JProperty("name", "New York"), new JProperty("country", "uss")).ToString() };
            }
        }
Ich finde es wesentlich übersichtlicher als Json direkt mit Text zu übergeben und auch das escapen der Anführungszeichen fällt weg. Bei einer Methode, die komplexeres Json verarbeitet, wäre es ein viel komplizierterer Aufbau. Außerdem bräuchte ich IEquatbable nur für die Unit-Tests. Gibt es eine Möglichkeit das einfacher zu testen oder lohnt sich dieser Aufwand?

Thema: Exception aus unreferenzierter Asswembly behandeln
Am im Forum: Rund um die Programmierung

Hallo,
wenn das Parsen fehlschlägt wird in einer Klassenbibliothek eine JsonException geworfen geworfen. Diese möchte ich nun in der Oberfläche abfangen, hier referenziere ich Json.Net aber garnicht. Sollte ich hier in eine andere Exception wrappen, oder einfach den Verweis hinzufügen? Und wenn ja in welche?

Thema: Durch Button neue View öffnen ohne eigenes Fenster
Am im Forum: GUI: WPF und XAML

Hallo,
ich möchte einen Einstellungsbutton erstellen, der ein neues View öffnet, welches das aktuelle Fenster überdeckt und eben nicht ein neues Fenster öffnet. Hierfür würde dann auch ein eigenes Viewmodel Sinn machen. Wie könnte ich das umsetzen?

Thema: Klasse zur API-Interaktion testen
Am im Forum: Rund um die Programmierung

Danke! Ich verstehe, dass ich IHTTPService für Mocking brauche, aber wieso IWeatherRepository?

Thema: Klasse zur API-Interaktion testen
Am im Forum: Rund um die Programmierung

Ich will folgende Klasse testen:


    public class WeatherQuery
    {
        #region fields
...
        #endregion
        #region enums
        public enum RequestType { Weather, Forecast}
        #endregion
        #region constructors
...
        #endregion
        #region methods
        private string GetWeather(RequestType requestType, NameValueCollection parameters)
        {
            using (var client = new WebClient())
            {
                return client.DownloadString(BuildQueryURL("data/2.5/" + requestType.ToString().ToLower(),UpdateParameters(parameters)));
            } 
        }
        private async Task<string> GetWeatherAsync(RequestType requestType, NameValueCollection parameters)
        {
...
        }
        public string GetWeather(RequestType requestType, string city, string countryCode)
        {
            return GetWeather(requestType, new NameValueCollection() { { "q", CombineQueryCountryCode(city,countryCode) } });
        }
        public string GetWeather(RequestType requestType, double latitude, double longitude)
        {
            return GetWeather(requestType, new NameValueCollection() { { "lat", latitude.ToString(CultureInfo.InvariantCulture) }, { "lon", longitude.ToString(CultureInfo.InvariantCulture) } });
        }

        public async Task<string> GetWeatherAsync(RequestType requestType, string city, string countryCode)
        {
...
        }
        public async Task<string> GetWeatherAsync(RequestType requestType, double latitude, double longitude)
        {
...
        }
        public byte[] GetIcon(string iconIdentifier)
        {
            using (var client = new WebClient())
            {
                return client.DownloadData(BuildQueryURL("img/w/",null));
            }
        }
        public async Task<byte[]> GetIconAsync(string iconIdentifier)
        {
            using (var client = new WebClient())
            {
                return await client.DownloadDataTaskAsync(BuildQueryURL("img/w/" + iconIdentifier,null));
            }   
        }
        private Uri BuildQueryURL(string relativePath, NameValueCollection parameters)
        {
            if (parameters == null) parameters = new NameValueCollection();
            //build uri//
            var builder = new UriBuilder(_scheme, _host);
            builder.Query = string.Join("&", parameters.AllKeys.Select((name) => string.Format("{0}={1}", HttpUtility.UrlEncode(name), HttpUtility.UrlEncode(parameters[name]))));
            return builder.Uri;
        }
        private NameValueCollection UpdateParameters(NameValueCollection parameters)
        {
...
        }
        private string CombineQueryCountryCode(string query, string countryCode)
        {
            return !string.IsNullOrEmpty(countryCode) ? query + "," + countryCode : query;
        }
        #endregion
    }
Mir sind schon zwei Tests eingefallen, die ich gerade aber nicht umsetzten kann:
-Obwohl es Sinn macht Methode BuildQueryURL zu testen, macht es keinen Sinn sie public zu machen.
-Ich müsste in jeder Methode ein WebClient übergeben, um auch ein Mockobjekt verwenden zu können. Gibt es eine elegantere Lösung?

Welche Tests wären sonst noch sinnvoll?

Thema: [Review]Erste Unit-Tests
Am im Forum: Code-Reviews

Okay, ich habe bisher noch nicht viel mit Mocking gemacht. Werde dann einfach entscheiden ob es für mich Sinn macht. Inwiefern setzt du dann soetwas um, da es kein Setup-Attribut gibt?

Thema: [Review]Erste Unit-Tests
Am im Forum: Code-Reviews

Ich verwende wie oben erwähnt xUnit und hier wird der und nicht die mit Setup markierte Methode sondern der Konstruktor vor jedem Test ausgeführt (Siehe Vergleich von Unit-Testing Frameworks)

Thema: [Review]Erste Unit-Tests
Am im Forum: Code-Reviews

Hallo,
ich habe nun angefangen mich mit Unit-Tests zu beschäftigen. Ich verwende xUnit und Autofixture. Hier sind meine ersten Tests:


//WeatherTests.cs//
        private Weather _dummyWeather = new Weather();
        [Theory,InlineData(-1),InlineData(101)]
        public void Humidity_InvalidValues_ExceptionThrown(double invalidHumidity)
        {
            Assert.Throws<ArgumentException>(() => _dummyWeather.Humidity = invalidHumidity);
        }
        [Theory,AutoData]
        public void TempUnit_TemperatureConvertation_TemperatureCalculated(double temperature, TemperatureUnit targetUnit)
        {
            var unit = _dummyWeather.TempUnit;
            _dummyWeather.Temperature = temperature;
            _dummyWeather.MaxTemperature = temperature;
            _dummyWeather.MinTemperature = temperature;
            _dummyWeather.TempUnit = targetUnit;
            Assert.Equal(_dummyWeather.Temperature, TemperatureUnitHelper.ConvertTemperature(unit, targetUnit, temperature),1);
            Assert.Equal(_dummyWeather.MaxTemperature, TemperatureUnitHelper.ConvertTemperature(unit, targetUnit, temperature), 1);
            Assert.Equal(_dummyWeather.MinTemperature, TemperatureUnitHelper.ConvertTemperature(unit, targetUnit, temperature), 1);    
        }
//TemperatureUnitHelperTest.cs//
        [Theory]
        [InlineData(-20,-4,253.15),InlineData(0,32,273.15),InlineData(20,68,293.15)]
        public void ConvertTemperature_CelsiusTemps_Calculated(double celsius, double expectedFahrenheit, double expectedKelvin)
        {
            Assert.Equal(expectedFahrenheit, TemperatureUnitHelper.ConvertTemperature(TemperatureUnit.Celsius, TemperatureUnit.Fahrenheit, celsius),2);
            Assert.Equal(expectedKelvin, TemperatureUnitHelper.ConvertTemperature(TemperatureUnit.Celsius, TemperatureUnit.Kelvin,celsius),2);
        }
        [Theory]
        [InlineData(250,-23.15, -9.67), InlineData(275, 1.85, 35.33),InlineData(300, 26.85, 80.33)]
        public void ConvertTemperature_KelvinTemps_Calculated(double kelvin, double expectedCelsius, double expectedFahrenheit)
...
        [Theory]
        [InlineData(-20, -28.89, 244.26),InlineData(0, -17.78, 255.37),InlineData(20, -6.67, 266.48)]
        public void ConvertTemperature_FahrenheitTemps_Calculated(double fahrenheit, double expectedCelsius, double expectedKelvin)
Das sind noch relativ simple Tests ohne Mocking etc. Gibt es trotzdem Verbesserungsmöglichkeiten?

Thema: Dezimalzeichen in TwoWay-Binding wird konvertiert. Wie verhindere ich das?
Am im Forum: GUI: WPF und XAML

Hallo,
ich habe endlich geschafft eine Textbox korrekt an eine Zahl zu binden.
Bei einem OneWayToSource-Binding funktioniert also alles einwandfrei. Bei einem TwoWay-Binding gibt es folgendes Problem:
Zum Beispiel "123," wird in "123" konvertiert und wird dann folgendermaßen auch übernommen. Ist es möglich dies zu ändern?

Thema: Wie mit ungültigen Werten in user.config umgehen
Am im Forum: Rund um die Programmierung

Es geht um Integer statt String. Habe gerade nochmal nachgeprüft und XML-Fehler treten beim Laden auf.

Thema: Wie mit ungültigen Werten in user.config umgehen
Am im Forum: Rund um die Programmierung

Hallo,
wenn ich einen ungültigen Wert in user.config angebe wird eine ConfgurationExeception geworfen. Ich habe schon versucht die Exception beim Laden der Konfiguration zu behandeln. Mir ist jetzt aber aufgefallen dass erst beim Zugreifen auf die betroffene Eigenschaft geworfen wird. Wie kann ich überprüfen ob ungültige Werte dabei sind?

Thema: Projekt: Wetter via Konsole und Desktop
Am im Forum: Projekte

Version 1.3 veröffentlicht

Änderungen
-Aktueller Ort wird nun wieder angezeigt
-3 stündliche Wettervorhersage
-Fehlerbehebungen und kleinere Verbesserungen

Download
Kann auf der "Projektseite" heruntergeladen werden.

Thema: Zwei Threads greifen auf Methode zu - Wie verhindere ich das?
Am im Forum: Rund um die Programmierung

Ich würde nicht sagen dass ich es im Schlaf singen kann, aber es ist mir nicht unvertraut. Das war eigentlich der komplette Sourcecode, den ich für wichtig finde. Dazwischen liegt in diesem Fall eigentlich nur eine weitere Methode:


public class Query : IDisposable
{
...
        protected readonly WebClient _client;
        protected async Task<Tuple<bool, byte[]>> DownloadDataAsync(Uri queryURI)
        {
            bool success = true;
            byte[] queryResponse = null;
            var query = new TaskCompletionSource<byte[]>();
            DownloadDataCompletedEventHandler downloadCompleted = (sender, e) => {
                if (e.Error != null)
                    query.SetException(e.Error);
                else
                    query.SetResult(e.Result);
            };
            _client.DownloadDataCompleted += downloadCompleted;
            _client.DownloadDataAsync(queryURI);
            try
            {
                queryResponse = await query.Task;
            }
            catch (WebException)
            {
                success = false;
            }
            _client.DownloadDataCompleted -= downloadCompleted;
            return new Tuple<bool, byte[]>(success, queryResponse);
        }
....
}
public class WeatherQuery : Query,IDisposable
    {
        public async Task<Tuple<bool,byte[]>> TryGetIconAsync(string iconIdentifier)
        {
            return await DownloadDataAsync(BuildWeatherQueryURL("img/w/" + iconIdentifier, null, false));
        }
    }
Bei der normalen Wetterabfrage verwende ich statt dem bool ein Enum, welches dann in eine Fehlermeldung konvertiert wird:


        public enum RequestStatus { OK, InvalidCity, InvalidKey, Failed, UnkownError }
Für mich ist es ein akzeptieble genau Meldung und ich muss die Exception nicht an zwei Stellen mit dem gleichen Code fangen und dort wird es doch ein gutes Stück lesbarer.
Bei den Icons kann ja nur die Verbindung nicht funktionieren.

Thema: Zwei Threads greifen auf Methode zu - Wie verhindere ich das?
Am im Forum: Rund um die Programmierung

Hallo,
ich habe eine Methode, die bytes asynchron herunterlädt:


        protected async Task<Tuple<bool, byte[]>> DownloadDataAsync(Uri queryURI)
        {
            bool success = true;
            byte[] queryResponse = null;
            var query = new TaskCompletionSource<byte[]>();
            DownloadDataCompletedEventHandler downloadCompleted = (sender, e) => {
                if (e.Error != null)
                    query.SetException(e.Error);
                else
                    query.SetResult(e.Result);
            };
            _client.DownloadDataCompleted += downloadCompleted;
            _client.DownloadDataAsync(queryURI);
            try
            {
                queryResponse = await query.Task;
            }
            catch (WebException)
            {
                success = false;
            }
            _client.DownloadDataCompleted -= downloadCompleted;
            return new Tuple<bool, byte[]>(success, queryResponse);
        }
Wenn ich jetzt in einer Schleife die Methode Aufrufe wird folgende Exception geworfen.


                Forecast = await Task.WhenAll(WeatherParser.ParseForecast(forecastResponse.Item2, Settings.TempUnit).Select(async (forecastAtDay) =>
                {
                    var forecastIcon = await weatherQuery.TryGetIconAsync(forecastAtDay.IconIdentifier);
                    return new WeatherIconWrapper(forecastAtDay, forecastIcon.Item1 ? LoadImage(forecastIcon.Item2) : null);
                }
                ));
Fehler
System.InvalidOperationException wurde nicht behandelt.
HResult=-2146233079
Message=Es wurde versucht, eine Aufgabe in einen finalen Zustand zu versetzen, als sie bereits abgeschlossen war.
Source=mscorlib
StackTrace:
bei System.Threading.Tasks.TaskCompletionSource`1.SetResult(TResult result)
bei OpenWeather.DataClient.Query.<>c__DisplayClass2_0.<DownloadDataAsync>b__0(Object sender, DownloadDataCompletedEventArgs e) in Query.cs:Zeile 33.
bei System.Net.DownloadDataCompletedEventHandler.Invoke(Object sender, DownloadDataCompletedEventArgs e)
bei System.Net.WebClient.OnDownloadDataCompleted(DownloadDataCompletedEventArgs e)
bei System.Net.WebClient.DownloadDataOperationCompleted(Object arg)
bei System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
bei System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
bei System.Windows.Threading.DispatcherOperation.InvokeImpl()
bei System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(Object state)
bei System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
bei MS.Internal.CulturePreservingExecutionContext.Run(CulturePreservingExecutionContext executionContext, ContextCallback callback, Object state)
bei System.Windows.Threading.DispatcherOperation.Invoke()
bei System.Windows.Threading.Dispatcher.ProcessQueue()
bei System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
bei MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
bei MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
bei System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
bei System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
bei System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
bei MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
bei MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
bei System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
bei System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame frame)
bei System.Windows.Application.RunDispatcher(Object ignore)
bei System.Windows.Application.RunInternal(Window window)
bei System.Windows.Application.Run(Window window)
bei System.Windows.Application.Run()
bei OpenWeather.GUI.App.Main() in \App.g.cs:Zeile 0.
bei System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
bei System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
bei Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
bei System.Threading.ThreadHelper.ThreadStart_Context(Object state)
bei System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
bei System.Threading.ThreadHelper.ThreadStart()
InnerException:
So weit wie ich das verstehe wird die Methode aus einem anderen Thread schon aufgerufen bevor diese Methode überhaupt beendet wurde. Hier dürfte also nur ein Thread auf die Methode zugreifen. Ist soetwas mit async/await überhaupt möglich oder sehe ich den Fehler an der falschen Stelle?

Thema: Nach asnychronem Konvertieren via LINQ - WIe warte ich auf das Ergebnis statt dem Task als Rückgabe?
Am im Forum: Rund um die Programmierung

Hallo,
Ich versuche eine Liste von Objekten mit einer asynchronen Operation zu konvertieren:


                Forecast = WeatherParser.ParseForecast(forecastResponse.Item2, Settings.TempUnit).Select(async (forecastAtDay) =>
                 {
                     var forecastIcon = await weatherQuery.TryGetIconAsync(forecastAtDay.IconIdentifier);
                     return new WeatherIconWrapper(forecastAtDay, forecastIcon.Item1 ? LoadImage(forecastIcon.Item2) : null);
                 }
                );
Hier wird statt der Liste von Objekten, jedoch eine von Tasks zurückgegeben. Wie kann ich auf diese "warten"?

Thema: Wie am besten Listen mit verschiedenen Typen zusammenführen
Am im Forum: Rund um die Programmierung

Hallo,
ich habe ein Liste mit Objekten und eine mit Icons. Ich kann ja nur eine an eine ListView binden. Da das Objekt Mono kompatibel sein sollte und das BitmapImage auch erst im ViewModel und nicht während der eigentlichen Erstellung des Objekts hinzugefügt wird, kommt eine Eigenschaft eher nicht in Frage. Folgende Optionen sind mir eingefallen:
-Verwenden eines Tuples
-Eine Wrapperklasse
-Von Weather ableiten und Eigenschaft hinzufügen
Welche sollte ich verwenden, oder wie führe ich Listen mit verschiedenen Typen am besten zusammen?

Thema: Projekt: Wetter via Konsole und Desktop
Am im Forum: Projekte

Version 1.0 veröffentlicht

Änderungen
-Schönere Oberfläche
-Wetterkonditon wird auf Desktop angezeigt

Download
Projekt auf GitHub

Ich habe das Projekt komplett neu aufgesetzt, da ich git schlecht bis überhaupt nicht verwendet habe. Für jetzt ist es auch beendet, die fehlende Features werde ich je nach Motivation noch implementieren.

Thema: Control für Darstellung von Prozentzahl in Kreis
Am im Forum: GUI: WPF und XAML

Ich habe mir den Usercontrol aus Th69 kopiert, und wollte nun meinen Textblock platizieren:


                <local:PercentagePresentator Grid.Row="1" StrokeThickness="10" SegmentColor="Aquamarine" Percentage="{Binding CurrentWeather.Humidity}" HorizontalAlignment="Center" Radius="25">
                    <TextBlock TextAlignment="Center" Text="{Binding CurrentWeather.Humidity, FallbackValue='-', StringFormat={}{0} %}"/>
                </local:PercentagePresentator>
Nur wird nun statt dem Kreis nur der Text angezeigt. Wie kann ich das ändern?

Thema: Control für Darstellung von Prozentzahl in Kreis
Am im Forum: GUI: WPF und XAML

Hallo,
ich möchte eine Prozentzahl ansprechend anzeigen. Dafür habe ich mich von der vorinstallieren Wetterapp inspieren lassen. Hier werden Prozentzahlen in einem Kreis um die Zahl dargestellt. (Siehe Anhang) Wie realsiere ich soetwas?

Thema: Projekt: Wetter via Konsole und Desktop
Am im Forum: Projekte

Version 0.6 veröffentlicht

Änderungen
-Wettervorhersage wird nun in Durschnittswerten in der Konsolenanwendung angezeigt
-Erste Schritte für Vorhersagen im Desktopprogramm
-Optimierungen

Download
Projekt auf GitHub

Thema: Parser-Methode Lesbarkeit verbessern
Am im Forum: Code-Reviews

Ersteinmal Danke für die Antworten!
@LaTino Ich habe bisher deseralisert, dass hat aber ein größeres Klassenkonstrukt erzeugt, in denen manche nur eine Eigenschaft hatten.
Dies ist mein verbesserter Converter:


    public static class WeatherParser
    {
        #region fields
        private const string climaticDataName = "main";
        private const string conditionName = "weather";
        private const string temperatureName = "temp";
        private const string minTemperatureName = "temp_min";
        private const string maxTemperatureName = "temp_max";
        #endregion
        #region methods
        private static DateTime UnixTimeToDateTime(string text) { ... }
        public static Tuple<string,string> ParseLocation(string queryResponse) { ... }
        public static Weather ParseCurrentWeather(string queryResponse, TemperatureUnit unit) { ... }
        #region forecast
        public static IDictionary<DateTime,Weather> ParseForecast(string queryResponse,TemperatureUnit unit)
        {
            var weatherPointsAtDays = GetTimePointsAtDay(queryResponse);
            return weatherPointsAtDays.Select(weatherPointsAtDay => new
            {
                Date = weatherPointsAtDay.Key,
                Weather = new Weather()
                {
                    Condition = GetConditionAtDay(weatherPointsAtDay),
                    Temperature = weatherPointsAtDay.Average(weatherPoint => weatherPoint[climaticDataName].Value<double>(temperatureName)),
                    MinTemperature = weatherPointsAtDay.Min(weatherPoint => weatherPoint[climaticDataName].Value<double>(temperatureName)),
                    MaxTemperature = weatherPointsAtDay.Max(weatherPoint => weatherPoint[climaticDataName].Value<double>(temperatureName)),
                    Humidity = weatherPointsAtDay.Average(weatherPoint => weatherPoint[climaticDataName].Value<double>())
                }
            }
            ).ToDictionary((weatherAtDay) => weatherAtDay.Date, (weatherAtDay) => weatherAtDay.Weather);
        }
        private static WeatherCondition GetConditionAtDay(IEnumerable<JToken> weatherPointsAtDay)
        {
            var weatherConditions = Enum.GetValues(typeof(WeatherCondition)).Cast<WeatherCondition>();
            return weatherConditions.OrderBy((condition) => weatherPointsAtDay.Count((timePoint) => ((WeatherCondition)Enum.Parse(typeof(WeatherCondition), timePoint[condition].First.Value<string>("main"))) == condition)).Last();
        }
        private static string GetConditionDescriptionAtDay(IEnumerable<JToken> weatherPointsAtDay)
        {
            var descriptions = weatherPointsAtDay.Select(weatherPoint => weatherPoint[conditionName].Value<string>("description")).Distinct();
            return descriptions.OrderBy(description => weatherPointsAtDay.Count((weatherPoint) => weatherPoint[conditionName].Value<string>("description") == description)).Last();
        }
        private static IEnumerable<IGrouping<DateTime, JToken>> GetTimePointsAtDay(string queryResponse)
        {
            return JObject.Parse(queryResponse)["list"].GroupBy((timePoint) => (UnixTimeToDateTime(timePoint.Value<string>("dt"))).Date);
        }
        #endregion
        #endregion
    }