如何将后台线程添加到Silverlight自定义控件?

时间:2011-09-17 17:29:08

标签: silverlight windows-phone-7 expression-blend windows-phone-7.1

我正在构建一个可以进行增强现实图像处理的Windows Phone 7+自定义控件。控件在实践中运行得非常好(当我运行应用程序时),但是因为我在单独的线程上运行图像处理,所以当我尝试在Blend或Visual Studio设计器中打开页面时,它会中断。

以下是我尝试运行的主题示例(基本上取自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();
    }
}

这打破了Blend的爱好。很想知道原因。

1 个答案:

答案 0 :(得分:5)

看起来你在OnApplyTemplate方法中做了很多运行时的事情。

当Blend或Visual Studio实例化控件的设计视图时,将调用此方法。

您应该使用DesignMode

检查您是否处于设计模式
if (!DesignMode)
{
    _myManualResetEvent = new ManualResetEvent(true);
    _myCameraProcessingThread = new System.Threading.Thread(ProcessingMethod);
    _myCameraProcessingThread.Start();
}

或将此代码移动到仅在应用程序实际运行时调用的方法/事件处理程序。