Archiv für das Tag '.Net'

Jul 14 2016

Zeit-Trennzeichen bei DateTime

Autor: . Abgelegt unter C# .Net

Diese Woche hat es das .NET geschafft mich zu überraschen, ein Programm ist beim Kunden mit italienischen Windows immer wieder abgestürzt. Nach langem Suchen hat ein Kollege das Problem erkannt, was durch das folgende Beispiel veranschaulicht wird:

var ci = new CultureInfo("it-IT");
var dateTime = DateTime.Now;
var str = dateTime.ToString("dd.mm.yyyy hh:mm:ss", ci);
Console.WriteLine(str);

Ausgabe (.NET 3.5): 14.07.2016 20.45.30
Ausgabe (.NET 4.0): 14.07.2016 20:45:30

Weiterlesen »

Kommentare deaktiviert für Zeit-Trennzeichen bei DateTime

Jun 18 2011

WPF RichTextBox mit Durchgestrichenden Text

Autor: . Abgelegt unter C# .Net

Um bei einer WPF RichTextBox einen Text Fett, Kursiv oder Unterstrichen darzustellen ist nicht viel notwenig. Eigentlich muss man im XAML nur einen (Toggle)Button definieren, der ein Kommando (EditingCommands) an die RichTextBox sendet:

<ToggleButton
  Command="EditingCommands.ToggleItalic"
  CommandTarget="{Binding ElementName=myRichTextBox}"
  Content="Italic"/>
<RichTextBox/>

Genauso einfach verhält es sich einen Text Hochgestellt oder Tiefgestellt darzustellen, mann muss nur zusätzlich noch die Schrift-Familie des Hinter der RichTextBox liegenden Dokumentes verändern:

<ToggleButton
  Command="EditingCommands.ToggleSubscript"
  CommandTarget="{Binding ElementName=myRichTextBox}"
  Content="Subscript"/>
<RichTextBox/>
  <!--on default fontfamily subscript and superscript dont work!!-->
  <FlowDocument FontFamily="Palatino Linotype" FontSize="14"/>
</RichTextBox>
 Weiterlesen »

Kommentare deaktiviert für WPF RichTextBox mit Durchgestrichenden Text

Jun 10 2011

Events über Threadgrenzen

Autor: . Abgelegt unter C# .Net

Die meisten Tools/Programme verrichten Ihre Arbeit in Threads um die Oberfläche (UI) nicht zu blockieren. Eine „Kommunikations-Möglichkeit“ um die UI beim Eintreten von bestimmten Gegebenheiten zu benachrichtigen sind Events. Ein Event im .Net ruft seine Ziele (InvokationList) aus dem Thread auf, aus dem es „gefeuert“ wird. UI Controls, können i.A. nur im Mainthread arbeiten. Einen Zugriff aus einen anderen Thread führt zu einer Exception. Über das Interface ISynchronizedInvoke (implementiert von allen .Net UI Controls):

public interface ISynchronizeInvoke
{
 bool InvokeRequired { get; }
 IAsyncResult BeginInvoke (Delegate method, object[] args);
 object EndInvoke(IAsyncResult result);
 object Invoke(Delegate method, object[] args);
}

Weiterlesen »

Kommentare deaktiviert für Events über Threadgrenzen

Jun 08 2011

Tracing/Logging und die Config-Datei

Autor: . Abgelegt unter C# .Net

Logging von Informationen ist so gut wie in jedem Programm notwendig. Nicht alle Entwickler können oder wollen ein professionelles Log-Tool wie z.B. log4net oder nlog verwenden. In vielen Fällen reichen auch Debug.WriteLine oder Trace.WriteLine (letztes schreibt auch wenn die Software im Modus „Release“ kompiliert wurde).

Über eine Config-Datei lassen sich u.a. verschiedene TraceListener auswählen:

  1. ConsoleTraceListener
  2. DefaultTraceListener
  3. DelimitedListTraceListener
  4. EventLogTraceListener
  5. EventSchemaTraceListener
  6. TextWriterTraceListener
  7. XmlWriterTraceListener
  8. eigene Implementierungen welche sich von TraceListener ableiten

Damit kann man ohne neu kompilieren des Assemblies einfach den Ausgabeort des Trace-Informationen verändern.

Weiterlesen »

Kommentare deaktiviert für Tracing/Logging und die Config-Datei

Jun 07 2011

Einiges über IDisposable

Autor: . Abgelegt unter C# .Net

Das Standard Interface IDisposable welches  zur „Freigabe“ von Ressourcen in .Net dient ist recht Einfach:

public interface IDisposable
{
	void Dispose();
}

Nur dieses Interface zu Implementieren reicht in vielen Fällen nicht aus. Es gibt z.B. einen FxCop Fehler Implement IDisposable correctly, dieser erscheint u.a. bei non-sealed Klassen welche keinen Medthode mit der Signatur protected virtual Dispose(bool) besitzen.  IDisposable zu Implementieren wird nötig wenn man:

  1. unmanged (native) Ressourcen lädt um diese wieder freizugeben
  2. managed Felder besitzt, welche wiederum IDisposable implementieren

Im folgenden Beispiel zeigt eine (nach FxCop komplette Implementierung) einer Basis-Klasse  und einer Kind-Klasse:

 Weiterlesen »

Kommentare deaktiviert für Einiges über IDisposable