Bir Olaya Abone Olma
Bu kılavuzda, çalışan bir belge tablosundaki (RDT) olaylara yanıt veren bir araç penceresinin nasıl oluşturulacağı açıklanmaktadır. Araç penceresi, uygulayan bir kullanıcı denetimini barındırıyor IVsRunningDocTableEvents. yöntemi arabirimini AdviseRunningDocTableEvents olaylara bağlar.
RDT Olaylarına Abone Olma
Araç penceresiyle uzantı oluşturmak için
VSIX şablonunu kullanarak RDTExplorer adlı bir proje oluşturun ve RDTExplorerWindow adlı özel bir araç penceresi öğesi şablonu ekleyin.
Araç penceresiyle uzantı oluşturma hakkında daha fazla bilgi için bkz . Araç Penceresi ile Uzantı Oluşturma.
RDT olaylarına abone olmak için
RDTExplorerWindowControl.xaml dosyasını açın ve adlı
button1
düğmeyi silin. Bir ListBox denetim ekleyin ve varsayılan adı kabul edin. Grid öğesi şöyle görünmelidir:<Grid> <StackPanel Orientation="Vertical" Margin="-10,10,10,0"> <TextBlock Margin="10" HorizontalAlignment="Center">RDTExplorerWindow</TextBlock> <ListBox x:Name="listBox" Height="100" /> </StackPanel> </Grid>
RDTExplorerWindow.cs dosyasını kod görünümünde açın. Dosyanın başlangıcına aşağıdaki using yönergelerini ekleyin.
using Microsoft.VisualStudio; using Microsoft.VisualStudio.Shell; using Microsoft.VisualStudio.Shell.Interop;
sınıfından
RDTExplorerWindow
türetmeye ToolWindowPane ek olarak arabirimini uygulayacak şekilde sınıfını IVsRunningDocTableEvents değiştirin.public class RDTExplorerWindow : ToolWindowPane, IVsRunningDocTableEvents {. . .}
uygulayın IVsRunningDocTableEvents.
- arabirimini gerçekleştirin. İmleci IVsRunningDocTableEvents adına getirin. Sol kenar boşluğunda bir ampul görmeniz gerekir. Ampulün sağındaki Aşağı oka tıklayın ve Arabirimi uygula'ya tıklayın.
Arabirimdeki her yöntemde satırını
throw new NotImplementedException();
şununla değiştirin:return VSConstants.S_OK;
RDTExplorerWindow sınıfına bir tanımlama bilgisi alanı ekleyin.
private uint rdtCookie;
Bu, yöntemi tarafından AdviseRunningDocTableEvents döndürülen tanımlama bilgisini tutar.
RDT olaylarına kaydolmak için RDTExplorerWindow'un Initialize() yöntemini geçersiz kılın. Hizmetleri her zaman oluşturucuda değil ToolWindowPane'ın Initialize() yönteminde almalısınız.
protected override void Initialize() { IVsRunningDocumentTable rdt = (IVsRunningDocumentTable) this.GetService(typeof(SVsRunningDocumentTable)); rdt.AdviseRunningDocTableEvents(this, out rdtCookie); }
Bir SVsRunningDocumentTable arabirim elde IVsRunningDocumentTable etmek için hizmet çağrılır. yöntemi, AdviseRunningDocTableEvents RDT olaylarını uygulayan IVsRunningDocTableEventsbir nesneye bağlar. Bu örnekte RDTExplorer nesnesi.
RDTExplorerWindow'un Dispose() yöntemini güncelleştirin.
protected override void Dispose(bool disposing) { // Release the RDT cookie. IVsRunningDocumentTable rdt = (IVsRunningDocumentTable) Package.GetGlobalService(typeof(SVsRunningDocumentTable)); rdt.UnadviseRunningDocTableEvents(rdtCookie); base.Dispose(disposing); }
UnadviseRunningDocTableEvents yöntemi ile RDT olay bildirimi arasındaki
RDTExplorer
bağlantıyı siler.deyiminden hemen önce
return
işleyicinin gövdesine OnBeforeLastDocumentUnlock aşağıdaki satırı ekleyin.public int OnBeforeLastDocumentUnlock(uint docCookie, uint dwRDTLockType, uint dwReadLocksRemaining, uint dwEditLocksRemaining) { ((RDTExplorerWindowControl)this.Content).listBox.Items.Add("Entering OnBeforeLastDocumentUnlock"); return VSConstants.S_OK; }
İşleyicinin OnAfterFirstDocumentLock gövdesine ve liste kutusunda görmek istediğiniz diğer olaylara benzer bir satır ekleyin.
public int OnAfterFirstDocumentLock(uint docCookie, uint dwRDTLockType, uint dwReadLocksRemaining, uint dwEditLocksRemaining) { ((RDTExplorerWindowControl)this.Content).listBox.Items.Add("Entering OnAfterFirstDocumentLock"); return VSConstants.S_OK; }
Projeyi derleyin ve hata ayıklamaya başlayın. Visual Studio deneysel örneği görüntülenir.
RDTExplorerWindow'ı açın (Görünüm / Diğer Windows / RDTExplorerWindow).
RDTExplorerWindow penceresi boş bir olay listesiyle açılır.
Bir çözüm açın veya oluşturun.
OnBeforeLastDocument
VeOnAfterFirstDocument
olaylar tetiklendiğinden, olay listesinde her olayın bildirimi görüntülenir.