2012-04-02 2 views
10

Esiste una differenza tra System.Windows.Clipboard e System.Windows.Forms.Clipboard?Esiste una differenza tra System.Windows.Clipboard e System.Windows.Forms.Clipboard?

La documentazione per la versione System.Windows.Forms afferma espressamente che per archiviare un oggetto negli Appunti deve essere serializzabile e la tua app deve avere il modello STA, ma la documentazione per la versione System.Windows non lo fa t elencare come un requisito. È? Perché avere due classi? Qual è la differenza?

In caso di importanza, la nostra app è WPF e sì, so che il primo è per WPF e il secondo per Windows.Forms ... ma perché? Perché non utilizzare sempre la versione System.Windows anche con le app basate su moduli, considerando che è solo un riferimento ed è meno restrittivo nel suo utilizzo e che un oggetto è solo un oggetto in .NET.

+0

Abbiamo codice WinForms che ha utilizzato System.Windows.Clipboard sin dall'alba dei tempi che è appena in corso. Passando a System.Windows.Forms.Clipboard è stato risolto il problema. PERCHÉ? –

risposta

5

Semplice: System.Windows.Clipboard (in PresentationCore.dll) è destinato all'uso con WPF, mentre System.Windows.Forms.Clipboard (in System.Windows.Forms.dll) è destinato a Windows Form.

Spesso incontrerete classi apparentemente identiche in entrambi gli assemblaggi; questo perché WPF e WinForms si basano su sistemi sufficientemente diversi che molte API di framework devono essere implementate in modo diverso. Non ho lavorato molto con gli appunti di sistema, ma la mia ipotesi è che abbia qualcosa a che fare con la relativa vicinanza di WinForm alle API Win32 di basso livello. Non sarei certo, però.

Poiché si lavora con WPF, è necessario utilizzare System.Windows.Clipboard, poiché apparentemente l'implementazione è diversa per WPF che per WinForms.

+1

Mentre sì, so che dovresti usarli nelle loro rispettive piattaforme, ma questo non spiega la differenza, e perché una parte ha una restrizione mentre l'altra no, eppure stanno parlando con la stessa COM-based clipboard. Questo è quello che mi sto chiedendo. Ad esempio, dal momento che la versione System.Windows sembra essere molto meno restrittiva, perché nemmeno l'app Windows Form usa quella? – MarqueIV

+0

Non penso che ci sarà più una risposta di così, quindi accetterò il tuo. Tuttavia, per quanto riguarda il problema di serializzazione, non so se si tratta di un errore nei documenti, o in realtà è consentito utilizzare una versione non serializzabile dei dati nella versione WPF. – MarqueIV

0

System.Windows namespace è su WPF (nuovo modo di creare GUI in Windows), mentre System.Windows.Forms spazio dei nomi contiene elementi su Forms (vecchio stile).

+0

Vedere il mio commento a @BoltClock sopra, ma in breve, questo non spiega la differenza. Questo sta spiegando l'uso. – MarqueIV

+0

Penso che la differenza sia che WPF lavora direttamente con DirectX per l'interfaccia utente, mentre Forms usa GDI +. Quindi WPF potrebbe utilizzare più thread per lavorare con GPU e altri componenti. –

+1

Ma gli appunti non hanno nulla a che fare con l'interfaccia utente. Si tratta di dati dietro le quinte, quindi nulla su questo dovrebbe avere importanza. – MarqueIV