3

我正在爲可以做增強現實圖像處理的Windows Phone 7+構建自定義控件。這個控件在實際中運行的很好(當我運行應用程序時),但是因爲我的圖像處理運行在一個單獨的線程上,所以當我嘗試在Blend或Visual Studio設計器中打開頁面時,它會中斷。如何將背景線程添加到Silverlight自定義控件?

這裏的線程我試圖運行(基本上是從http://msdn.microsoft.com/en-us/library/hh202982(v=vs.92).aspx採取)的例子:

public override void OnApplyTemplate() 
{ 
    // assigning template stuff, initializing my camera 

    _myManualResetEvent = new ManualResetEvent(true); 
    _myCameraProcessingThread = new System.Threading.Thread(ProcessingMethod); 
    _myCameraProcessingThread.Start(); 
} 

void ProcessingMethod() 
{ 
    int[] myBuffer = new int[640 * 480]; 
    while(_someCondition) 
    { 
     _myManualResetEvent.WaitOne(); 
     _myCamera.GetPreviewBufferArgb32(myBuffer); 
     // do my processing stuff 
     _myManualResetEvent.Set(); 
    } 
} 

這打破了以往的愛好赫克混合的。想知道爲什麼。

回答

5

看起來你在做OnApplyTemplate方法中的很多運行時間的東西。

當Blend或Visual Studio實例化控件的設計視圖時,會調用它。

您應該檢查使用DesignMode看到,如果你是在設計模式:

if (!DesignMode) 
{ 
    _myManualResetEvent = new ManualResetEvent(true); 
    _myCameraProcessingThread = new System.Threading.Thread(ProcessingMethod); 
    _myCameraProcessingThread.Start(); 
} 

或此代碼移到當應用程序實際運行,只有被調用的方法/事件處理程序。

+0

謝謝!那是我的問題。如果我可以問一個後續......應用程序運行時調用哪些方法/事件處理程序? – MatthiasS

+0

@MatthiasS - 有一個「Loaded」事件。檢查[本頁](http://msdn.microsoft.com/en-us/library/cc189018(v = vs.95).aspx)以獲取有關Silverlight事件的更多信息。 – ChrisF

相關問題