다른 폼의 컨트롤의 컨트롤 속성을 설정하는 PropertyGrid가 있습니다. 그러나 "위치"및 "텍스트"와 같은 것들을 위해, 나는 스레딩 문제를 교차시킵니다.C# PropertyGrid 컨트롤을 사용하여 컨트롤 속성 변경 "ThreadSafe"
AllowIlligalCrossThread = true를 사용하지 않고 안전하게 속성을 설정하는 것이 쉬운 방법이 있습니까?
감사합니다.
다른 폼의 컨트롤의 컨트롤 속성을 설정하는 PropertyGrid가 있습니다. 그러나 "위치"및 "텍스트"와 같은 것들을 위해, 나는 스레딩 문제를 교차시킵니다.C# PropertyGrid 컨트롤을 사용하여 컨트롤 속성 변경 "ThreadSafe"
AllowIlligalCrossThread = true를 사용하지 않고 안전하게 속성을 설정하는 것이 쉬운 방법이 있습니까?
감사합니다.
속성을 무시하고 Invoke를 사용하여 속성을 "스레드 안전"방식으로 설정하는 파생 하위 클래스를 만들 수 있습니다.
class DerivedLabel : Label
{
public override string Text
{
get
{
return Invoke(new Func<string>(GetText)) as string;
}
set
{
Invoke(new Action<string>(SetText), value);
}
}
private void SetText(string text)
{
base.Text = text;
}
private string GetText()
{
return base.Text;
}
}
호출()는 당신이 컨트롤을 만든 동일한 스레드에 전달하는 대리자를 실행, 그래서 암시 적으로 스레드 안전합니다. 그러나 서브 클래 싱해야 할 컨트롤이 많으면 많은 작업이 될 수 있습니다.
스레딩 문제가 발생하는 이유를 알아내는 것이 더 나을 것입니다. 두 컨트롤이 동일한 스레드에서 생성되면 (Windows 응용 프로그램의 경우처럼) 이러한 예외가 발생하지 않아야합니다. 어떤 이유로 다른 스레드에 PropertyGrid 양식을 작성하고 있습니까?