DependencyObject.Dispatcher Properti

Definisi

Mendapatkan CoreDispatcher yang dikaitkan dengan objek ini. CoreDispatcher mewakili fasilitas yang dapat mengakses DependencyObject pada utas UI meskipun kode dimulai oleh utas non-UI.

public:
 property CoreDispatcher ^ Dispatcher { CoreDispatcher ^ get(); };
CoreDispatcher Dispatcher();
public CoreDispatcher Dispatcher { get; }
var coreDispatcher = dependencyObject.dispatcher;
Public ReadOnly Property Dispatcher As CoreDispatcher

Nilai Properti

CoreDispatcher yang dikaitkan dengan objek DependencyObject, yang mewakili utas UI.

Contoh

Contoh ini menunjukkan penggunaan Dispatcher untuk implisit ini dari file code-behind untuk Halaman. Contoh ini menggunakan ekspresi lambda untuk menambahkan implementasi DispatchedHandler . Handler itu sendiri menangani peristiwa Accelerometer.ReadingChanged , yang tidak akan dijalankan pada utas UI.

private async void ReadingChanged(object sender, AccelerometerReadingChangedEventArgs e)
{
    await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
    {
        AccelerometerReading reading = e.Reading;
        ScenarioOutput_X.Text = String.Format("{0,5:0.00}", reading.AccelerationX);
        ScenarioOutput_Y.Text = String.Format("{0,5:0.00}", reading.AccelerationY);
        ScenarioOutput_Z.Text = String.Format("{0,5:0.00}", reading.AccelerationZ);
    });
}

Keterangan

Properti Dispatcher menyediakan referensi CoreDispatcher yang dapat digunakan untuk panggilan marshal yang berasal dari utas non-UI, menggunakan RunAsync dan fungsi yang dapat ditunggu. Untuk informasi selengkapnya tentang fungsi yang dapat ditunggu, lihat Memanggil API asinkron di C# atau Visual Basic. Lihat juga bagian "DependencyObject and threading" dari topik referensi DependencyObject .

DependencyObject harus dibuat pada utas UI dan memiliki afinitas ke utas UI. Karena ini adalah titik masuk yang memungkinkan untuk melintasi utas, DependencyObject.Dispatcher adalah satu-satunya API instans DependencyObject atau salah satu subkelasnya yang dapat diakses dari utas non-UI tanpa melemparkan pengecualian lintas alur. Semua API DependencyObject lainnya memberikan pengecualian jika Anda mencoba memanggilnya dari utas pekerja atau utas non-UI lainnya.

Secara khusus, properti Dispatcher mendapatkan CoreDispatcher yang terkait dengan utas UI aplikasi. Menjalankan kode melalui metode RunAsynccoreDispatcher diperlukan jika Anda ingin mengkueri atau mengubah nilai properti dependensi apa pun, bahkan jika objek tersebut belum terkait dengan pohon visual XAML atau UI yang terlihat (akar visual jendela aplikasi).

Window.Dispatcher juga mereferensikan CoreDispatcher yang terkait dengan utas UI. Window.Dispatcher pada dasarnya hanyalah pembungkus di sekitar CoreWindow.Dispatcher sehingga kelas Window memiliki akses mudah ke dalamnya.

Catatan

Koneksi untuk nilai Dispatcher tidak tersedia dalam tampilan waktu desain. Ini dapat menyebabkan masalah jika Anda telah membuat kontrol kustom yang menggunakan nilai Dispatcher dan kode tersebut diakses oleh lingkungan waktu desain melalui jalur kode yang digunakan tampilan desain, seperti konstruktor dan Handler yang dimuat . Jika Anda menulis kontrol kustom dan mengalami masalah ini, pertimbangkan untuk memperkenalkan kondisional penjaga dalam kode Anda seperti tidak memanggil kode tersebut saat DesignModeEnabledbenar.

Berlaku untuk