Seltsames Verhalten mit der Zwischenablage in der C # -Konsolenanwendung

8

Betrachten Sie dieses kleine Programm:

%Vor%

Ich führe es aus, und ich kopiere eine Zeichenfolge aus dem Editor. Aber das Programm bekommt nur eine leere Zeichenfolge aus der Zwischenablage und schreibt "Sie kopiert".

Was ist das Problem hier? Gibt es etwas, das den Zugriff auf die Zwischenablage in einer Konsolenanwendung merkwürdig macht?

Dies ist Windows 7 SP1 x86, .NET 4 Clientprofil.

    
LTR 05.12.2013, 17:49
quelle

4 Antworten

9

Verwenden Sie diese Funktion

%Vor%

In dieser Zeile:

%Vor%

Das Problem ist, dass die Zwischenablage nur mit bestimmten Threading-Modellen (ApartmentState.STA) funktioniert. Sie müssen also einen neuen Thread erstellen und dem Modell mitteilen, dass dieser Code das tut.

    
Hogan 05.12.2013, 18:21
quelle
5

Ich kann das Problem mit Ihrem Code im .NET 4-Client-Profil reproduzieren, aber wenn ich zu .NET 4 oder 4.5 umschalte, funktioniert es wie erwartet.

Das ClipBoard.GetText() Handbuch lautet jedoch:

  

Bestimmen Sie mit der Methode ContainsText , ob die Zwischenablage Textdaten enthält, bevor Sie sie mit dieser Methode abrufen.

Ich nehme das als eine Anweisung, nicht als einen Vorschlag, also, versuchen Sie Folgendes:

%Vor%

Es zeigt den kopierten Text, obwohl ich sagen muss, dass mein System schrecklich hängt, wenn ich etwas Text kopiere.

    
CodeCaster 05.12.2013 18:18
quelle
3

Das funktioniert für mich:

%Vor%     
RobSiklos 05.12.2013 18:14
quelle
1

Ihr aktueller Code wartet explizit auf die erste Änderung von "xxPlaceholderxx" auf irgendwas (Ihre Bedingung ist "nicht bestimmte Zeichenkette AND nicht leer", die falsch wird, sobald sich die Zeichenkette von "xxPlaceholderxx" zu irgendetwas ändert, einschließlich "" ):

%Vor%

Wahrscheinlich möchten Sie || (oder) anstelle von und:

%Vor%     
Alexei Levenkov 05.12.2013 18:10
quelle

Tags und Links