정적 및 동적 열이있는 표를 만들려고합니다. 동적 열은 ColumnGroups 아래에 있어야합니다. ColumnGroups를 사용하지 않을 때는 모든 것이 정상적으로 작동합니다. 하지만 그룹 중 하나에 동적 열을 할당하려고 할 때RadGridView 동적으로 열 및 ColumnGroups 스레드 문제가 발생합니다.
다른 스레드가이 개체를 소유하고 있기 때문에 호출 스레드가이 개체에 액세스 할 수 없습니다.
내가 별도의 스레드에서 새 창을 만들
내가 만든 후Thread newWindowThread=new Thread(new ThreadStart(() =>
{
var instrumentWindow=new InstrumentWindow();
((InstrumentWindowViewModel)instrumentWindow.DataContext).Initialize(instrument.ToString(),DateTime.Today);
instrumentWindow.Show();
System.Windows.Threading.Dispatcher.Run();
}));
newWindowThread.SetApartmentState(ApartmentState.STA);
newWindowThread.IsBackground = true;
newWindowThread.Start();
정적 열
this.EventGrid.Columns.Add(new GridViewDataColumn()
{
Header = "Time",
DataMemberBinding = new Binding("Time"),
DataType = typeof(DateTime)
});
그리고 동적 열
기본적으로 생각이
를 만들기위한 책임이 실제로 기능 각 용어에 대해 ColumnGroup을 만들고 해당 그룹 아래에 용어 속성을 표시합니다. 나는이 스레드 예외가 열을 ColumnGroup을 assig 할 때private void InitDynamicColumns()
{
var maxTermCount = ((InstrumentWindowViewModel)this.DataContext).Events.Max(x => x.Terms.Length);
var termHeaders = new List<string>();
for (int i = 0; i < maxTermCount; i++)
{
var currentTerm = ((InstrumentWindowViewModel)this.DataContext).Events.First().Terms[i];
var analyzerAmountType = currentTerm.Type == AnalyzerAmountType.Seconds ? "sec" : "ticks";
this.EventGrid.ColumnGroups.Add(new GridViewColumnGroup
{
Header = currentTerm.Size + " " + analyzerAmountType + " term",
Name = currentTerm.Size + analyzerAmountType + "term"
});
termHeaders.Add(currentTerm.Size + analyzerAmountType + "term");
}
for (int i = 0; i < maxTermCount; i++)
{
this.EventGrid.Columns.Add(new GridViewDataColumn()
{
Header = "Property1",
DataMemberBinding = new Binding("Terms[" + i + "].Property1"),
ColumnGroupName = termHeaders[i]
});
this.EventGrid.Columns.Add(new GridViewDataColumn()
{
Header = "Property2",
DataMemberBinding = new Binding("Terms[" + i + "].Property2"),
ColumnGroupName = termHeaders[i]
});
this.EventGrid.Columns.Add(new GridViewDataColumn()
{
Header = "Property3",
DataMemberBinding = new Binding("Terms[" + i + "].Property3"),
ColumnGroupName = termHeaders[i]
});
}
}
는 언제 ColumnGroups 모든 것을 사용하지 않는 expected.But로 작동합니다.
도움 주셔서 감사합니다.
이유가 있다고 생각하지 마십시오. 나는 ModalWindow 코드의 컨트롤을 사용하여 모든 조작을 수행합니다. 동적 열의 경우 모든 것이 완벽하게 작동합니다. ColumnGroup을 만들고 할당하려고 할 때 실패하기 시작합니다. 그리고 이것은 이상합니다 –
이유가 무엇인지 생각하지 마십시오? 왜 처음부터 백그라운드 스레드에 창을 만듭니 까? 동일한 스레드에서 모든 컨트롤을 만드는 경우 분명히 크로스 스레딩 오류가 발생하지 않습니다. – mm8
메인 창에서 몇 개의 독립적 인 창을 만들어야합니다. 그리고 각 창은 주 창을 차단하지 않는 독립적 인 데이터를 얻게됩니다. –