관리 C++ 래퍼를 작성한 관리되지 않는 C++ 라이브러리가 있습니다. 지금은 C#에서 이것을 호출하려고합니다. 여태까지는 그런대로 잘됐다.C# 스레드에서 비 관리 코드 호출
표현 : 범위
중 벡터 첨자이도 가능 내가 관리되지 않는 코드 내에서 예외를 얻을 C#을 스레드에서 같은 코드를 호출하려고하지만 때? 각 스레드가 관리되지 않는 클래스의 자체 인스턴스를 가져올 것이라고 가정합니다.
스레드 내에서 관리되지 않는 코드를 호출하는 것에 대한 자세한 정보는 길고 열심히 찾았지만 정보는 부족한 것처럼 보입니다. 사전에 어떤 도움
감사
C++ 래퍼
// Managed wrapper
public ref class EllipseFit
{
private:
// Pointer to unmanaged class
UnmanagedEllipseFit* _unmanagedEllipseFit;
public:
// Constructor & Destructor
EllipseFit()
{
_unmanagedEllipseFit = new UnmanagedEllipseFit();
}
~EllipseFit()
{
delete _unmanagedEllipseFit;
}
List<Ellipse^>^ ProcessImage(array<Byte>^ image, int width, int height)
{
pin_ptr<unsigned char> pimg = &image[0];
_unmanagedEllipseFit->processsImage(pimg, width, height);
// Marshal the results... <edited>
return ellipses;
}
};
C#을 스레드
private void DcThread()
{
EllipseFit ellipseFit = new EllipseFit();
string fullPath = _fileList.GetNext();
while (fullPath != null)
{
// Load the image
Bitmap bitmap = new Bitmap(fullPath);
byte[] imageData = TsImage.ConvertBitmap(bitmap);
// Process
List<DcEllipse> ellipses = ellipseFit.ProcessImage(imageData, bitmap.Width, bitmap.Height);
// Save the associated text file.. (Debug)
TextWriter textFile = new StreamWriter(fullPath.Replace(".jpg", ".txt"));
foreach (DcEllipse ellipse in ellipses)
textFile.WriteLine(String.Format("{0} {1} {2} {3} {4}", ellipse.X, ellipse.Y, ellipse.MajorAxisLength, ellipse.MinorAxisLength, ellipse.Angle));
textFile.Close();
fullPath = _fileList.GetNext();
}
}
C#을 스레드 .NET에서
Thread t1 = new Thread(DcThread);
t1.Start();
당신은 우리가 어떤을 만들기 위해 위해 C++/CLI 코드의 일부를 표시해야 할거야 (COM과 상호 작용을 위해 일반적으로 유용) STA에 아파트 상태를 설정할 수 있습니다 이 감각. –
* EDIT * 예외는 하나 이상의 스레드가있을 때만 발생합니다. 그것의 스레드에서, 나는 다른 예외를 보지 못했습니다. –
각 스레드에 대해 클래스의 별도 인스턴스를 명시 적으로 만들고 있습니까? 관리되는 래퍼 클래스 나 관리되지 않는 네이티브 클래스가 멀티 스레딩을 위해 설계되지 않았을 때이를 공유하는 것은 큰 일입니다. –