开发者

How Do I Add Background Thread To Silverlight Custom Control?

I'm building a custom control for Windows Phone 7+ that can do augmented reality image processing. The control works wonderfully in practice (when I run the app), but because I have the image processing running on a separate thread, it breaks when I try to open the page in Blend or the Visual Studio designer.

Here's an example of the thread I'm trying to run (basically taken from 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(开发者_高级运维);
    }
}

This breaks the ever-loving heck out of Blend. Would love to know why.


It looks like you are doing a lot of run-time stuff in the OnApplyTemplate method.

This will get called when Blend or Visual Studio instantiates the design view of your control.

You should either check to see if you are in design mode using the DesignMode:

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

or move this code into a method/event handler that only gets called when the application actually runs.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜