2011-05-10 57 views
1

我在窗體上運行一個攝像頭。爲了整潔,我想在退出我的應用程序時終止流。所以我將這添加到我的FormClosed事件中:c#FormClosed事件的問題

private void Mainform_FormClosed(object sender, FormClosedEventArgs e) 
{ 
    // When the window is closed then shut down the webcam 
    if (FinalVideoSource.IsRunning) 
    { 
     FinalVideoSource.Stop(); 
    } 
    MessageBox.Show("Closing", "Closing", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); 
} 

一切都很好如果我的攝像頭正在運行。但是,如果攝像頭經過測試,發現不在運行。然後,我的表單不會關閉(我已經將消息框放在那裏以測試事件是否被調用,並且除非網絡攝像頭正在運行,否則不顯示消息)。

我猜的東西與具有if語句我的表單中造成問題做。

任何人都可以幫忙嗎?

非常感謝, 本

+0

您是否嘗試過「FormClosing」事件而不是「FormClosed」? – acron 2011-05-10 10:17:11

+0

不,在FormClosed事件中的'if'語句不會導致這個問題。然而,這個事件在表格已經關閉之後被提出。相反,您可能想要在「FormClosing」事件內部進行清理。 – 2011-05-10 10:17:34

+0

您是否檢查'FinalVideoSource.IsRunning'的值?它可以爲空嗎? – RaM 2011-05-10 10:18:04

回答

1

也許你也應該檢查是否FinalVideoSource == null或不是。

+0

好點。這是我能想到的唯一一種會阻止窗體關閉的事情(即拋出異常)。 – acron 2011-05-10 10:19:57

+0

沒錯,但是如果'FinalVideoSource'是'null',那麼當試圖調用該對象的屬性時會引發異常。當程序在連接調試器的情況下運行時,異常情況會立即顯示在屏幕上,從而使問題立即顯現出來。 – 2011-05-10 10:23:31

+0

完美,謝謝Dev.Jaap那種工作。只要我對未來有所瞭解,如果某個事件發生異常,例如視頻源未初始化,它就不會告訴我......它只會使事件失敗。是對的嗎? – mrbencowell 2011-05-10 10:24:47

0

使用FormClosing Event而非FormClosed Event

+0

謝謝Pankaj,但是沒有什麼區別。如果攝像頭正在運行,那麼一切正常。但是,如果沒有網絡攝像頭,則不會調用該事件,並且表單不會關閉。 – mrbencowell 2011-05-10 10:19:06