2013-10-14 58 views
0

在開發Resharper插件的過程中,我想在錯誤地使用上下文操作時向用戶顯示錯誤消息。有沒有辦法在Visual Studio中彈出窗口來向用戶傳遞Resharper異常消息?我正在開發一個帶Resharper 8和VS 2012的插件顯示來自resharper插件的異常消息

+0

剛使用'MessageBox.Show'有什麼問題?或者您是否有要求使這種方法行不通? – ChrisF

回答

3

您可以隨時使用MessageBox - ReSharper還提供了一個靜態類,它提供了許多幫助器方法,可以很容易地顯示您想要的內容。它還允許添加「消息框處理程序」,以便在測試期間實際上不顯示消息框。或者,如果您要創建上下文操作,並且您(間接)從BulbActionBase派生,則ExecutePsiTransaction方法(應完成所有工作)可以返回Action<ITextControl>。這允許您返回在快速修復/上下文操作完成後執行的操作,這可以是定位插入符號,更改選擇內容,執行模板或將工具提示顯示爲錯誤等任何操作。

您可以返回這樣的事情:

return tc => myLocks.QueueReadLock("MyContextAction",() => { 
    myTooltipManager.Show("Something went wrong!", 
     lifetime => new TextControlPopupWindowContext(lifetime, tc, myLocks, myActionManager); 
    }); 

這是用若干領域:IShellLocks myLocksITooltipManager myTooltipManagerIActionManager myActionManager。這些可以通過ReSharper的組件模型被注入到組件的構造函數,或者你可以用solution.GetComponent<IShellLocks>讓他們等

發生了什麼事是,你回來是發生在一個ITextControl,並立即排隊另一個操作的操作在讀取鎖定時在UI線程上運行。第二個動作告訴工具提示管理器將錯誤消息顯示爲工具提示,並提供用於創建彈出窗口上下文的工廠方法(通過調用Show創建並處置參數lifetime,並允許清理上下文)。

你也可以看看ShowAtCaret擴展方法爲ITooltipManager - 我不記得Show將放置工具提示。