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

相关问题