해결 방법을 찾을 수 없다는 문제가 발생하여 BackgroundWorker를 올바르게 이해하지 못하고 있다고 생각하기 시작했습니다.BackgroundWorker를 사용하여 직렬화 메서드 호출
내 프로그램의 저장 /로드 기능을 처리하기 위해 BackgroundWorker를 사용하려고합니다. 즉, 작업자가 내가 만든 직렬화 메서드를 호출하도록하고 싶습니다.
직렬화 방법은 POCO를 사용하고 xml이 직렬화합니다. 이 POCO는 여러 속성을 포함하며 그 중 하나는 Brush 유형입니다.
public Brush ShapeColor{ get; set; }
나는 색상을 직렬화하고 싶지만 나는 브러쉬를 직렬화 할 수 없기 때문에, 나는 지원 프로퍼티했습니다하십시오 BackgroundWorker
를 사용하지 않고
public Color StoreColor
{
get
{
g = ((Color)ShapeColor.GetValue(SolidColorBrush.ColorProperty)).G;
r = ((Color)ShapeColor.GetValue(SolidColorBrush.ColorProperty)).R;
b = ((Color)ShapeColor.GetValue(SolidColorBrush.ColorProperty)).B;
return Color.FromRgb(r, g, b);
}
set {}
}
이 잘 작동합니다. 은 그러나 곧 나는 doWork
방법 직렬화 메소드의 메소드 호출을 만들려고 노력으로, 예외가 던져 : 다른 스레드가 그것을 소유하고 있기 때문에
호출 스레드가이 개체에 액세스 할 수 없습니다. 이들에
:
g = ((Color)ShapeColor.GetValue(SolidColorBrush.ColorProperty)).G;
r = ((Color)ShapeColor.GetValue(SolidColorBrush.ColorProperty)).R;
b = ((Color)ShapeColor.GetValue(SolidColorBrush.ColorProperty)).B;
나의 이해는 UI 스레드가 아닌 다른 스레드에서 직렬화 메소드를 호출하는 BackgroundWorker
를 사용하여, 나는 노동자가 UI 요소에 액세스 할 수 없다는 규칙을 위반하는 것입니다.
솔직히 말해서 내 질문을 공식화하는 방법에 대해 확신 할 수 없지만 작업자로부터 이러한 POCO를 직렬화 할 수는 없습니까? 브러시 인 ShapeColor
과 관련이 있습니까?
미리 감사하고 내 나쁜 설명 :
편집 죄송합니다 다음 XML 직렬화 방법을 게시.
public static void convertToXML<T>(T objectToSave, string path) where T : new()
{
StreamWriter streamWriter = null;
try
{
XmlSerializer serializer = new XmlSerializer(typeof(T));
streamWriter = new StreamWriter(path, false);
XmlWriterSettings settings = new XmlWriterSettings()
{
Indent = true,
OmitXmlDeclaration = true,
};
serializer.Serialize(streamWriter, objectToSave);
}
finally
{
// Close writer
if (streamWriter != null)
{
streamWriter.Close();
}
}
}
시도가'''Thread.CurrentThread.ManagedThreadId''' 당신이 만들 때를 확인하려면'''ShapeColor'''하고 여기에 접근. – tym32167
브러시와 같은 GDI 개체는 데이터 구조 일뿐만 아니라 UI 스레드와 연결되어 있습니다. BGW를 사용할 필요가 없습니다. BGW는 더 이상 사용되지 않으며 비동기 저장에는 완전히 필요하지 않습니다. 예를 들어 FileStream과 같은 비동기 메서드를 사용하여 데이터를 비동기 적으로 저장할 수 있습니다. –
* serialization * 코드를 게시하십시오.귀하가 게시 한 코드는 문제를 일으키지 않으며 수정하지 못합니다. –