Masuk dengan Microsoft
Masuk atau buat akun.
Halo,
Pilih akun lain.
Anda memiliki beberapa akun
Pilih akun yang ingin Anda gunakan untuk masuk.

Gejala

Berulang panggilan ke fungsi Manajer jendela yang diekspor oleh USER32. DLL mungkin kembali tanpa melakukan operasi yang diminta dan tanpa menetapkan kode galat. Hal ini biasanya terjadi di aplikasi dengan hierarki sangat bersarang jendela. Di antara gejala yang mungkin Anda alami:

  • Aplikasi dengan hierarki sangat bersarang jendela gagal untuk mengubah ukuran jendela anak dengan benar saat jendela frame diubah ukurannya. Windows telah dipindahkan atau diubah ukurannya dengan menelepon MoveWindow, SetWindowPos atau DeferWindowPos.

  • Jendela pesan tidak disebarkan ke jendela induk atau jendela anak seperti yang diharapkan. DefWindowProc mungkin tidak berhasil menyebarkan pesan ke jendela induk atau jendela anak jendela menerima pesan.

  • Jendela pesan yang dikirim ke jendela dengan menelepon SendMessage, SendMessageTimeout atau SendMessageCallback tidak diterima oleh jendela tertentu.

Selain itu, aplikasi yang tidak berfungsi secara normal juga mungkin mengalami gejala yang dijelaskan di atas jika WH_CALLWNDPROC atau WH_CALLWNDPROCRET jendela kait ditetapkan di untaian di aplikasi yang memiliki jendela. Jendela kait dapat diatur pada topik tertentu atau semua UI thread dengan memanggil fungsi SetWindowsHookEx.

Penyebab

Perilaku ini merupakan akibat dari Windows tidak dapat berkembang memori kernel thread panggilan untuk menjalankan operasi yang diminta. Karena memori kernel tambahan yang diperlukan dalam x64 prosedur penanganan lingkungan Windows, memori kernel dapat mengkonsumsi di tingkat yang lebih cepat daripada di x86 lingkungan Windows ketika membuat berulang panggilan ke fungsi Manajer jendela diekspor oleh USER32. DLL. meskipun gejala yang dijelaskan di artikel ini cenderung terjadi pada x64 platform Windows, dimungkinkan untuk panggilan berulang mengkonsumsi memori kernel thread pada x86 platform Windows.

Pemecahan Masalah

Solusi berikut dapat digunakan untuk mengatasi masalah ini

  1. Mengubah ukuran jendela anak saat menangani WM_WINDOWPOSCHANGED jendela pesan alih-alih lewat pesan ke DefWindowProc.

  2. Asinkron mengubah ukuran jendela anak saat jendela induk diubah ukurannya bukan mengubah ukuran jendela anak saat memroses WM_WINDOWPOSCHANGED atau WM_SIZE jendela pesan.

  3. Merancang aplikasi UI untuk mengurangi kedalaman bersarang jendela.

Informasi Selengkapnya

Porsi subsistem Win32 diimplementasikan pada pengandar perangkat kernel-mode (Win32. SYS). Panggilan ke fungsi yang diekspor oleh USER32. DLL untuk mengubah status jendela, termasuk ukuran dan posisi, akan memanggil ke Win32. SYS untuk menjalankan operasi yang diminta. Fungsi yang mengubah status jendela biasanya hasil di jendela pesan yang dikirim ke jendela yang sedang diubah, dimana Win32. SYS membuat memanggil mode pengguna untuk melakukan panggilan prosedur jendela jendela yang sedang diubah. Sebagai contoh, Win32. SYS akan mengirim jendela WM_WINDOWPOSCHANGING jendela dan WM_WINDOWPOSCHANGED jendela pesan saat ukuran dan/atau posisi jendela yang dimodifikasi dengan memanggil fungsi SetWindowPos. DefWindowProc akan mengirim pesan WM_SIZE saat dipanggil dengan pesan WM_WINDOWPOSCHANGED jendela tertentu dan ukuran jendela telah diubah. Aplikasi biasanya mengubah ukuran jendela anak saat jendela induk menerima WM_WINDOWPOSCHANGED atau WM_SIZE jendela pesan, yang mengarah ke panggilan berulang menjadi Win32. SYS untuk hierarki sangat bersarang jendela. Aplikasi yang tidak berfungsi secara normal mungkin juga mengalami gejala yang dijelaskan di artikel ini ketika kait WH_CALLWNDPROC atau WH_CALLWNDPROCRET ditetapkan pada benang dalam proses. Hal ini disebabkan oleh ruang memori kernel tambahan yang mengkonsumsi ketika Win32. SYS menangani panggilan prosedur kait. Memanggil SendMessage untuk mengirim pesan jendela untuk jendela yang dimiliki oleh thread panggilan biasanya akan panggilan prosedur jendela jendela menerima pesan tanpa harus memanggil ke Win32. SYS. Namun, SendMessage akan menelepon ke Win32. SYS jika ada kait WH_CALLWNDPROC atau WH_CALLWNDPROCRET kait ditetapkan pada thread panggilan, sebagai Win32. SYS mengelola kait dan penanganan panggilan prosedur kait. Seperti yang disebutkan di atas, DefWindowProc akan mengirim ditetapkan jendela pesan WM_SIZE saat dipanggil dengan pesan WM_WINDOWPOSCHANGED dan ukuran jendela telah diubah. Kait WH_CALLWNDPROC atau WH_CALLWNDPROCRET akan menyebabkan panggilan SendMessage DefWindowProc membuat untuk beralih ke kernel mode untuk panggilan prosedur kait. Resize jendela anak saat menangani WM_WINDOWPOSCHANGED jendela pesan alih-alih WM_SIZE jendela pesan akan mengurangi penggunaan memori kernel menghilangkan kebutuhan SendMessage untuk beralih ke mode kernel urutan panggilan prosedur kait. Pengembang aplikasi Windows Forms yang mengalami masalah ini akan merujuk ke artikel KB 953934untuk informasi lebih lanjut.

Perlu bantuan lainnya?

Ingin opsi lainnya?

Jelajahi manfaat langganan, telusuri kursus pelatihan, pelajari cara mengamankan perangkat Anda, dan banyak lagi.

Komunitas membantu Anda bertanya dan menjawab pertanyaan, memberikan umpan balik, dan mendengar dari para ahli yang memiliki pengetahuan yang luas.

Apakah informasi ini berguna?

Seberapa puaskah Anda dengan kualitas bahasanya?
Apa yang memengaruhi pengalaman Anda?
Dengan menekan kirim, umpan balik Anda akan digunakan untuk meningkatkan produk dan layanan Microsoft. Admin TI Anda akan dapat mengumpulkan data ini. Pernyataan Privasi.

Terima kasih atas umpan balik Anda!

×