Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Metodo GCHandle.Alloc (Object)

 

Data di pubblicazione: novembre 2016

Alloca un Normal handle per l'oggetto specificato.

Spazio dei nomi:   System.Runtime.InteropServices
Assembly:  mscorlib (in mscorlib.dll)

[SecurityCriticalAttribute]
public static GCHandle Alloc(
	object value
)

Parametri

value
Type: System.Object

L'oggetto che utilizza il GCHandle.

Valore restituito

Type: System.Runtime.InteropServices.GCHandle

Un nuovo GCHandle che protegge l'oggetto dalla procedura di garbage collection. Questo GCHandle deve essere liberata con Free quando non è più necessario.

Exception Condition
ArgumentException

Un'istanza con membri non primitivi (non copiabili) non può essere bloccata.

Normal gli handle sono opachi, il che significa che non è possibile risolvere l'indirizzo dell'oggetto contenuto tramite l'handle.

Nell'esempio seguente un App classe che crea un handle per un oggetto gestito utilizzando il GCHandle.Alloc metodo, che impedisce l'oggetto gestito di raccolta. Una chiamata al EnumWindows metodo passa un delegato e un oggetto gestito (entrambi dichiarati come tipi gestiti ma non visualizzato) e imposta l'handle per un IntPtr. La funzione non gestita passa il tipo al chiamante come parametro della funzione di callback.

using System;
using System.IO;
using System.Threading;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Security.Permissions;

public delegate bool CallBack(int handle, IntPtr param);

public class LibWrap
{
	// passing managed object as LPARAM
	// BOOL EnumWindows(WNDENUMPROC lpEnumFunc, LPARAM lParam);

	[DllImport("user32.dll")]
	public static extern bool EnumWindows(CallBack cb, IntPtr param);
}

public class App
{
	public static void Main()
	{
		Run();
	}

        [SecurityPermission(SecurityAction.Demand, UnmanagedCode=true)]
	public static void Run()
        {
		TextWriter tw = System.Console.Out;
		GCHandle gch = GCHandle.Alloc(tw);

		CallBack cewp = new CallBack(CaptureEnumWindowsProc);

		// platform invoke will prevent delegate to be garbage collected
		// before call ends

		LibWrap.EnumWindows(cewp, GCHandle.ToIntPtr(gch));
		gch.Free();
        }

	private static bool CaptureEnumWindowsProc(int handle, IntPtr param)
	{
		GCHandle gch = GCHandle.FromIntPtr(param);
		TextWriter tw = (TextWriter)gch.Target;
		tw.WriteLine(handle);
		return true;
	}
}

SecurityCriticalAttribute

requires full trust for the immediate caller. This member cannot be used by partially trusted or transparent code.

Universal Windows Platform
Disponibile da 8
.NET Framework
Disponibile da 1.1
Libreria di classi portabile
Supportato in: piattaforme .NET portabili
Silverlight
Disponibile da 2.0
Windows Phone Silverlight
Disponibile da 7.0
Windows Phone
Disponibile da 8.1
Torna all'inizio
Mostra: