ShowDialog() verzögert Applikation

Gestern bin ich mal wieder über das selbe Problem wie damals gestoßen. Ich hab es damals nicht weiter erläutert. Und zwar sollte auf Knopfdruck eine Form erscheinen, welche über den ganzen Bildschirm geht, womit der Benutzer interagieren kann. Im Prinzip bestand die Form nur aus einer PictureBox und er sollte dort einen Bereich auswählen.
Lasse ich mir die Form per Show() anzeigen habe ich keine Probleme, per ShowDialog() hängt er jeweils 4 Sekunden (geschätzt).
Diese 4 Sekunden reichen aber dem normalen Benutzer schon aus, um sich darüber zu beschweren.
Gelöst habe ich es wieder einmal mit einem Show() und einen Closed-Event. Zusammen mit TopMost hatte ich den gewünschten Effekt. Erklären kann ich es mir dennoch und vor allem immer noch nicht.

(Wenn Interesse besteht, lade ich mal eine Beispielsolution hoch).

Fehlerhafte Links in der Sidebar bei WordPress

Vorhin ist mir aufgefallen, dass die Links zu den letzten Kommentaren in der Sidebar fehlerhaft waren. Sie zeigten sogar in ein falschen Blog. Ich dachte, es läge an der WordPress MU Installation. Also spielte ich mit den Einstellungen herum und verschlimmbesserte nur noch alles. Also ging ich einen anderen Weg und versuchte dem Fehler auf die Schliche zu kommen, in dem ich die Funktionen testete. Das ist aber recht schwierig, da das WordPress Backend mittlerweile riesig ist und wenn man nicht Up-To-Date ist, hat man absolut keine Chance. Also den Königsweg gegangen und nach und nach alle Plugins deaktiviert und schon hatte ich den schuldigen gefunden: FeedWordpress

Das Plugin sorgt dafür, dass der RSS Feed anderer Blogs ausgelesen werden und hier als eigene Einträge erscheinen. Damit der Fehler reproduzierbar ist, müssen folgende Voraussetzungen erfüllt sein:
– Bei FeedWordpress muss unter Einstellungen -> „Posts & Links“ -> Permalink auf „point to the copy on the original website“ stehen
– der letzte Eintrag der Seite muss ein per Feed importierter Eintrag sein
– Das Widget „Recent_Comments“ oder jede andere Funktion, dass einen Permalink per „get_permalink()“ zu holen versucht, muss „nach“ diesem bestimmten Beitrag ausgeführt werden

Um den Fehler zu verstehen, schauen wir kurz in die „feedwordpress.php“ im Pluginverzeichnis.
Dort steht folgendes:

function syndication_permalink ($permalink = '') {
	if (get_option('feedwordpress_munge_permalink') != 'no'):
		$uri = get_syndication_permalink();
		return ((strlen($uri) > 0) ? $uri : $permalink);
	else:
		return $permalink;
	endif;
} // function syndication_permalink ()

In unserem Fall ruft er also die Funktion „get_syndication_permalink()“ ohne Parameter auf:

function get_syndication_permalink ($id = NULL) {
	list($u) = get_post_custom_values('syndication_permalink', $id); return $u;
}

Als Defaultwert ist NULL angegeben. Ein Blick in den WordPress-Codex verrät, dass er das Benutzerdefinierte Feld des aktuellen Eintrags laden versucht. Das ist logischerweise noch der aus dem Feed importierte Eintrag und daher lädt er eine falsche URL.

Um das Problem zu beheben, einfach den Code oben durch folgenden ersetzen:

function syndication_permalink ($permalink = '') {
	$id = url_to_postid($permalink);
	if (get_option('feedwordpress_munge_permalink') != 'no'):
		$uri = get_syndication_permalink($id);
		return ((strlen($uri) > 0) ? $uri : $permalink);
	else:
		return $permalink;
	endif;
} // function syndication_permalink ()

Die „url_to_postid()“ ist eine WordPress-eigene Funktion. Nun funktioniert es wieder. Darauf muss man erstmal kommen!

C# – PrintDialog.ShowDialog() funktioniert nicht

Bin gerade auf ein sehr merkwürdiges Problem gestoßen, dass doch locker eine Stunde wertvolle Lebenszeit gekostet hat.
Folgender Code:

PrintDialog pd = new PrintDialog();
if (pd.ShowDialog() == DialogResult.OK)
{
    // do nothing

}

Nichts großes, sollte einfach nur so ein Druckerfenster öffnen, wo der Drucker ausgewählt wird etc. Leider öffnete sich der erhoffte Dialog nicht. Der Debugger läuft dahin, aber er führt den ShowDialog() einfach nicht aus.

Wenn ich die Eigenschaft „UseEXDialog“ auf „true“ setze, funktioniert es.
Jedoch wollte ich nicht den XP-Dialog, sondern den anderen. Auch im Netz fand ich keine wirkliche Lösung.
Da diese Codezeilen aus einem bestehenden Projekt stammen, habe ich kurzerhand neue Projekte in den Frameworks 2.0, 3.5 und 4.0 angelegt. Jeweils mit dem Codeschnippsel oben. Und siehe da, es funktioniert problemlos, in jeder Frameworkversion. Nun die Unterschiede gesucht.

Fündig wurde ich den Projekteigenschaften unter „Build“ bzw. „Erstellen“.
Ich muss dazu sagen, dass die Applikation vorher auf einem anderen Rechner mit einem 32-bit Windows entwickelt wurde. So stand hier unter dem Punkt „Platform target:“ (auf Deutsch vermutlich Zielplattform) „Any CPU“.
Stellt die Anwendung hier auf 32-bit (x86) und der PrintDialog() wird hervorragend funktionieren. x64 oder Any CPU funktioniert nicht.
Auf so etwas muss man erstmal kommen, warum das so ist, keine Ahnung.

So habe ich noch mal in der MSDN nachgeschlagen:

This class may not work on AMD64 microprocessors unless you set the UseEXDialog property to true.

Ich bin zwar nun nicht der technisch versierte Mensch, aber für mich hört sich das nach einem Problem mit einem AMD Prozessor an, ich habe jedoch einen Intel (ich lasse es mir aber dennoch gerne erklären).

Meine T-Mobile Kündigung – Teil 1

Ich habe mir vor kurzem ein O² Vertrag mit dem Palm Pre besorgt. Da mein Vertrag bei T-Mobile demnächst ausläuft, wollte ich meine Rufnummer mit übernehmen. Leider machte mir T-Mobile einen Strich durch die Rechnung. Daher zeig ich euch erstmal, wann mein Vertrag auslaufen sollte, nach meiner Meinung:

29.05.2006 – Vertrag bei T-Mobile, 24 Monate Laufzeit
10.04.2008 – Vertragsverlängerung um 24 Monate

So, was meint ihr, wann der Vertrag ausläuft? Also meiner Rechnung nach am 28.05. 2010. Bei T-Mobile am 09.04.2010. Daher ist meine Kündigung laut deren Meinung auch zu spät rausgegangen, so das sie meinen Vertrag erst zum 09.04.2011 kündigen wollen. Nun hab ich gestern da angerufen und wollte wissen, wie die darauf kommen. Nach langem hin und her konnte mir der Supporter auch nicht sagen, warum das alles so ist. Nun wird mein Anliegen an die Reklamationsabteilung weitergeleitet, die wollen sich Montag melden.
Ich bin gespannt.

Linq und string.Contains() – Problem

Ich hatte eine kleine Methode, um mir bestimmte Datensätze aus einer Datenbank zu holen. Dazu nutze ich Linq, da es schön einfach ist.

        public IEnumerable<Data> Search(string filter)
        {
            var dataSet = from data in this.bigDataSet
                          where data.Name.Contains(filter)
                          select data;

            return dataSet;
        }

Über die Variable „filter“ wollte ich die Daten eingrenzen. Allerdings sollte es auch möglich sein, sich alle Datensätze anzusehen. In der MSDN zu string.Contains() lautet es:

Rückgabewert
true, wenn der value-Parameter in dieser Zeichenfolge vorkommt oder value eine leere Zeichenfolge („“) ist, andernfalls false.

Heißt für mich, dass ich „filter“ leer lassen kann und so alle Datensätze bekomme. Funktionierte aber nicht. Ich vermute mal, es liegt daran, dass ich Linq-to-Ent verwende. Das Workaround funktioniert aber ganz gut:

        public IEnumerable<Data> Search(string filter)
        {
            var dataSet = from data in this.bigDataSet
                          where (!string.IsNullOrEmpty(filter) ? data.Name.Contains(filter) : true)
                          select data;

            return dataSet;
        }

Vielleicht hat ja jemand genauere Informationen, warum der erste Ansatz nicht funktioniert. Auf Anhieb habe ich nichts gefunden.