2011-04-29 44 views
0

我想在卸載時顯示自定義windows窗體。我將爲此使用C#自定義操作。如何讓自定義操作等待直到用戶單擊確定或取消?我希望我的自定義操作僅在表單關閉時才能完成。所以做我的自定義操作如下:卸載時自定義windows窗體

CollectUninstallData f = new CollectUninstallData(); 
      f.Show(); 
      return f.FormResult; 

但形式閃爍了一下,卸載繼續無需等待的形式關閉。由於GUI在另一個線程中,這是合乎邏輯的。但是,如何讓它等待表單關閉?

我知道在安裝包中顯示自定義窗體並不酷,所以如果任何人都可以提供更優雅的解決方案,那麼我會很高興地接受它。

+1

爲什麼不使用Windows Installer提供的UI? (但是,從控制面板啓動時,卸載在最小UI中運行?) – 2011-05-02 10:48:29

+0

@Alexey Ivanov如果我的方法無效,我會嘗試。在.NET中創建表單比在WiX中更容易。 – 2011-05-02 18:42:30

+1

您可以使用[WixEdit](http://wixedit.sourceforge.net/)來設計Windows Installer的UI。嵌入式UI比.NET更輕量級。您想要在卸載時收集哪些數據?或者它只是一種確認? – 2011-05-03 06:05:36

回答

0

您必須使用ShowDialog()方法而不是Show()。後者使表單可見並返回控制,這就是您的自定義操作停止執行的原因。前者將窗體顯示爲模式對話框,並且在用戶以任何方式關閉窗體之前不會返回。

CollectUninstallData f = new CollectUninstallData(); 
DialogResult r = f.ShowDialog(); 
f.Dispose(); 
return r; 

如果您想知道用戶是否單擊了「確定」或「取消」,請使用此語句return r == DialogResult.OK ? 0 : 1。返回碼零通常表示成功,非零表示失敗。