2014-02-19 37 views
0

我有一個應該繼續觀看來自外部源(FileSystemWatcher)的事件的程序,並且源代碼需要我的處理代碼速度很快,否則我可能會丟失下一個事件。在一個單獨的線程中觀察事件c#

但是在任何時候我的程序可能正在執行繁重的操作。

First question: 

如果在繁重的操作過程中發生外部事件,我的程序是否會在處理事件之前完成操作?

Second question: 

我是一個新手到線程,所以我的主要問題是如何創建一個單獨的線程永久從外部源做only事件handlings? 我的第一個方法是這個線程將簡單地存儲主代碼準備訪問的數據,並使用繁重的代碼來處理存儲的數據。

謝謝。

+0

你看了關於異步和等待? http://msdn.microsoft.com/en-us/library/hh191443.aspx – TheGeekYouNeed

+1

如果我正確理解你的問題,那麼你可以做什麼,當一個事件引發,保存事件的所有上下文,並張貼工作項到線程池,並有池線程執行繁重的工作,並且原始線程很快返回到外部代碼。這假定一旦線程返回,您保存的上下文不會失效。 – LB2

+0

你的格式很刺激。請看看選項,並使用一些理智的。 http://stackoverflow.com/editing-help - 謝謝。 (不,格式化爲'代碼'應該是一個**標題**,**粗體**,*強調*或編號列表不是理智的。) – JensG

回答

1

該事件將在觸發事件的線程上運行。如果您的應用程序執行的是昂貴的操作,並且事件從另一個線程中啓動,那麼這兩個事件是獨立的,以免兩個線程之間同步。

如果您通過對它們進行極化處理來處理事件,則一個活動將阻止下一個活動。

不知道您正在處理的事件以及它們如何提出,這只是最通用的建議。

---編輯

Does FileSystemWatcher create its own thread?

+0

這是一個FileSystemWatcher引發事件。 你的意思是我不需要擔心,因爲事件已經在一個單獨的線程(FileSystemWatcher線程)中處理了? –