Я разрабатываю приложение, которое читает наборы данных DICOM и визуализирует их с помощью методов объемного рендеринга с использованием библиотеки VTK . В любом случае, проблема, с которой я сталкиваюсь, заключается в том, что объемный рендеринг действительно ограничен процессором. Если я обрабатываю рендеринг тома в однопоточном процессе, приложение (GUI) зависает и переходит в состояние «не отвечает». Я написал другой поток для процесса рендеринга тома. Однако GUI все еще зависает, вот коды.
private: System::Void volumeRenderButton_Click(System::Object^ sender, System::EventArgs^ e) {
volumeRenderThread = gcnew System::Threading::Thread(gcnew System::Threading::ThreadStart(this, &Form1::volumeRender));
volumeRenderThread->Priority = System::Threading::ThreadPriority::Lowest;
volumeRenderThread->Start();
}
private: void volumeRender()
{
threeDPictureBox->Invoke(gcnew volumeDelegate(this, &Form1::volumeDelegateMethod));
/*
if ( threeDPictureBox->InvokeRequired )
{
threeDPictureBox->Invoke(gcnew System::Action(this, &Form1::volumeRender));
}
else
{
dicom->VolumeRender(threeDPictureBox, vrSettings);
}
*/
}
private: delegate void volumeDelegate();
private: void volumeDelegateMethod()
{
dicom->VolumeRender(threeDPictureBox, vrSettings);
}
void Dicom::VolumeRender( Windows::Forms::PictureBox ^pictureBox, VRsettings *settings )
{
renderer = vtkSmartPointer < vtkRenderer > :: New();
renderWindow = vtkSmartPointer < vtkWin32OpenGLRenderWindow > :: New();
renderWindow->AddRenderer(renderer);
renderWindow->SetParentId((HWND)((pictureBox->Handle).ToPointer()));
renderWindow->SetSize(pictureBox->Width, pictureBox->Height);
renderWindow->Initialize();
/* A lot of stuff here */
...
...
renderWindow->Render();
iren->Initialize(); // vtkWin32RenderWindowInteractor
}
threeDPictureBox - это компонент PictureBox, который я отправляю в метод volumeRender объекта dicom. vrSettings - это структура для параметров объемного рендеринга.
Когда кнопка Render громкости нажата, и обработчик события click срабатывает, volumeRenderThread запускает и останавливает приложение, даже если я установил его приоритет наименьший! Я также попробовал строки, которые прокомментированы. Ни один из них не работает. Какой смысл мне не хватает ?? Спасибо за ответы с этого момента !!