Я задал вопрос о своей проблеме, и я добился некоторого прогресса. Я отправляю дескриптор компонента PictureBox в свой метод VolumeRender, метод VolumeRender связывает компонент PictureBox с vtkRenderWindow, обрабатывает конвейер и обновляет renderWindow. Хорошо, этот процесс выполняется вне потока пользовательского интерфейса, но проблема в том, что как только поток объемного рендеринга выходит за рамки, поток пользовательского интерфейса, я не знаю почему, освобождает компонент pictureBox. Вот коды;
private: System::Void volumeRenderButton_Click(System::Object^ sender, System::EventArgs^ e)
{
volumeRenderThread = gcnew System::Threading::Thread(
gcnew System::Threading::ThreadStart(this, &Form1::volumeRender));
volumeRenderThread->Start(threeDPictureBox->Handle);
}
private: void volumeRender( System::Object ^obj )
{
IntPtr ^ptr = (IntPtr ^) obj;
dicom->VolumeRender((HWND)(ptr->ToPointer()), vrSettings);
}
void Dicom::VolumeRender(HWND pictureBoxHandle, VRsettings *settings )
{
renderer = vtkSmartPointer < vtkRenderer > :: New();
renderWindow = vtkSmartPointer < vtkWin32OpenGLRenderWindow > :: New();
renderWindow->AddRenderer(renderer);
renderWindow->SetParentId(pictureBoxHandle);
renderWindow->SetSize(settings->width, settings->height);
renderWindow->Initialize();
iren = vtkSmartPointer < vtkWin32RenderWindowInteractor > :: New();
iren->SetRenderWindow(renderWindow);
/* Volume Render Pipeline
...
...
*/
renderWindow->Render();
iren->Initialize();
}
Я уверен, что проблема не связана с VTK. При отладке кода, после выполнения оператора renderWindow->Render(), в основной форме визуализированное изображение видно на компоненте pictureBox, но после того, как поток volumeRender выходит за пределы области видимости, threeDPictureBox каким-то образом освобождается. Спасибо за ответы! действительно нужна помощь