Grid.children.clear线程错误xmpp wpf
我正在调用一个具有Grid.children.clear线程错误xmpp wpf,wpf,grid,xmpp,Wpf,Grid,Xmpp,我正在调用一个具有Grid.Children.Clear()功能的方法。当从不同的方法调用它时,它工作得很好。但是当我从xmpp_onmessage方法调用我的方法时。我遇到了一个错误。“调用线程无法访问此对象,因为其他线程拥有它。” 下面是包含Grid.Children.Clear()的方法: private视图(布尔值isChat) { System.uriresourceuri=new System.Uri(“Public/Images/chat_green-textarea.png
Grid.Children.Clear()功能的方法。当从不同的方法调用它时,它工作得很好。但是当我从xmpp_onmessage方法调用我的方法时。我遇到了一个错误。“调用线程无法访问此对象,因为其他线程拥有它。”
下面是包含Grid.Children.Clear()的方法:
private视图(布尔值isChat)
{
System.uriresourceuri=new System.Uri(“Public/Images/chat_green-textarea.png”,UriKind.Relative);
StreamResourceInfo streamInfo=Application.GetResourceStream(resourceUri);
System.uriresourceuri2=new System.Uri(“Public/Images/chat_green-textarea-tail.png”,UriKind.Relative);
StreamResourceInfo streamInfo2=Application.GetResourceStream(resourceUri2);
System.uriresourceuri3=new System.Uri(“Public/Images/chat_blue-textarea.png”,UriKind.Relative);
StreamResourceInfo streamInfo3=Application.GetResourceStream(resourceUri3);
System.uriresourceuri4=new System.Uri(“Public/Images/chat_blue-textarea-tail.png”,UriKind.Relative);
StreamResourceInfo streamInfo4=Application.GetResourceStream(resourceUri4);
BitmapFrame temp=BitmapFrame.Create(streamInfo.Stream);
var brush=新的ImageBrush();
brush.ImageSource=温度;
BitmapFrame temp2=BitmapFrame.Create(streamInfo2.Stream);
BitmapFrame temp3=BitmapFrame.Create(streamInfo3.Stream);
var brush2=新的ImageBrush();
brush2.ImageSource=temp3;
BitmapFrame temp4=BitmapFrame.Create(streamInfo4.Stream);
int ctr=0;
chatGrid.Children.Clear();
if(isChat==true)
{
对于(int i=0;i<\u messageView.Count;i++)
{
if((!\u messageView.ElementAt(i).Message.ToString().Trim().Equals(“”))
{
RowDefinition chatGridRow1=新的RowDefinition();
RowDefinition chatGridRow2=新的RowDefinition();
RowDefinition chatGridRow3=新的RowDefinition();
添加(chatGridRow1);
添加(chatGridRow2);
添加(chatGridRow3);
if(_messageView.ElementAt(i).IsMe==true)
{
TextBlock Message=新建TextBlock();
Message.前台=画笔.White;
Message.Padding=新厚度(10,10,10,10);
Message.HorizontalAlignment=HorizontalAlignment.Right;
Message.Margin=新厚度(0,0,5,0);
Message.Background=2;
Message.TextWrapping=TextWrapping.Wrap;
Message.Text=_messageView.ElementAt(i).Message;
Grid.SetRow(消息,ctr);
Grid.SetColumn(消息,0);
ctr++;
Image Bluetail=新图像();
Bluetail.Source=temp4;
Bluetail.HorizontalAlignment=HorizontalAlignment.Right;
蓝尾鱼。高度=10;
蓝尾鱼。宽度=20;
蓝尾金=新厚度(0,-(0.7),10,0);
Grid.SetRow(蓝尾,ctr);
ctr++;
标签发送者=新标签();
Sender.Foreground=画笔.White;
边距=新厚度(0,0,0,10);
Sender.HorizontalAlignment=HorizontalAlignment.Right;
Sender.Content=“发送人:”+\u messageView.ElementAt(i).Name.ToString()+“”+\u messageView.ElementAt(i).DateCreated.ToString();
Grid.SetRow(发送方、ctr);
Grid.SetColumn(发送方,0);
ctr++;
chatGrid.Children.Add(消息);
chatGrid.Children.Add(蓝尾);
chatGrid.Children.Add(发送方);
}
其他的
{
TextBlock Message=新建TextBlock();
Message.前台=画笔.White;
Message.Padding=新厚度(10,10,10,10);
Message.HorizontalAlignment=HorizontalAlignment.Left;
Message.Margin=新厚度(5,0,0,0);
Message.Background=brush;
Message.TextWrapping=TextWrapping.Wrap;
Message.Text=_messageView.ElementAt(i).Message;
Grid.SetRow(消息,ctr);
Grid.SetColumn(消息,0);
ctr++;
图像绿尾=新图像();
Greentail.Source=temp2;
Greentail.HorizontalAlignment=HorizontalAlignment.Left;
绿尾。高度=10;
绿尾。宽度=20;
绿尾边缘=新厚度(10,-(0.7),5,0);
Grid.SetRow(绿尾,ctr);
ctr++;
标签发送者=新标签();
Sender.Foreground=画笔.White;
边距=新厚度(0,0,0,10);
Sender.HorizontalAlignment=HorizontalAlignment.Left;
Sender.Content=“发送人:”+\u messageView.ElementAt(i).Name.ToString()+“”+\u messageView.ElementAt(i).DateCreated.ToString();
Grid.SetRow(发送方、ctr);
Grid.SetColumn(发送方,0);
ctr++;
private void ConstructChatView(Boolean isChat)
{
System.Uri resourceUri = new System.Uri("Public/Images/chat_green-textarea.png", UriKind.Relative);
StreamResourceInfo streamInfo = Application.GetResourceStream(resourceUri);
System.Uri resourceUri2 = new System.Uri("Public/Images/chat_green-textarea-tail.png", UriKind.Relative);
StreamResourceInfo streamInfo2 = Application.GetResourceStream(resourceUri2);
System.Uri resourceUri3 = new System.Uri("Public/Images/chat_blue-textarea.png", UriKind.Relative);
StreamResourceInfo streamInfo3 = Application.GetResourceStream(resourceUri3);
System.Uri resourceUri4 = new System.Uri("Public/Images/chat_blue-textarea-tail.png", UriKind.Relative);
StreamResourceInfo streamInfo4 = Application.GetResourceStream(resourceUri4);
BitmapFrame temp = BitmapFrame.Create(streamInfo.Stream);
var brush = new ImageBrush();
brush.ImageSource = temp;
BitmapFrame temp2 = BitmapFrame.Create(streamInfo2.Stream);
BitmapFrame temp3 = BitmapFrame.Create(streamInfo3.Stream);
var brush2 = new ImageBrush();
brush2.ImageSource = temp3;
BitmapFrame temp4 = BitmapFrame.Create(streamInfo4.Stream);
int ctr = 0;
chatGrid.Children.Clear();
if (isChat == true)
{
for (int i = 0; i < _messageView.Count; i++)
{
if ((!_messageView.ElementAt(i).Message.ToString().Trim().Equals("")))
{
RowDefinition chatGridRow1 = new RowDefinition();
RowDefinition chatGridRow2 = new RowDefinition();
RowDefinition chatGridRow3 = new RowDefinition();
chatGrid.RowDefinitions.Add(chatGridRow1);
chatGrid.RowDefinitions.Add(chatGridRow2);
chatGrid.RowDefinitions.Add(chatGridRow3);
if (_messageView.ElementAt(i).IsMe == true)
{
TextBlock Message = new TextBlock();
Message.Foreground = Brushes.White;
Message.Padding = new Thickness(10, 10, 10, 10);
Message.HorizontalAlignment = HorizontalAlignment.Right;
Message.Margin = new Thickness(0, 0, 5, 0);
Message.Background = brush2;
Message.TextWrapping = TextWrapping.Wrap;
Message.Text = _messageView.ElementAt(i).Message;
Grid.SetRow(Message, ctr);
Grid.SetColumn(Message, 0);
ctr++;
Image Bluetail = new Image();
Bluetail.Source = temp4;
Bluetail.HorizontalAlignment = HorizontalAlignment.Right;
Bluetail.Height = 10;
Bluetail.Width = 20;
Bluetail.Margin = new Thickness(0, -(0.7), 10, 0);
Grid.SetRow(Bluetail, ctr);
ctr++;
Label Sender = new Label();
Sender.Foreground = Brushes.White;
Sender.Margin = new Thickness(0, 0, 0, 10);
Sender.HorizontalAlignment = HorizontalAlignment.Right;
Sender.Content = "Sent By : " + _messageView.ElementAt(i).Name.ToString() + " " + _messageView.ElementAt(i).DateCreated.ToString();
Grid.SetRow(Sender, ctr);
Grid.SetColumn(Sender, 0);
ctr++;
chatGrid.Children.Add(Message);
chatGrid.Children.Add(Bluetail);
chatGrid.Children.Add(Sender);
}
else
{
TextBlock Message = new TextBlock();
Message.Foreground = Brushes.White;
Message.Padding = new Thickness(10, 10, 10, 10);
Message.HorizontalAlignment = HorizontalAlignment.Left;
Message.Margin = new Thickness(5, 0, 0, 0);
Message.Background = brush;
Message.TextWrapping = TextWrapping.Wrap;
Message.Text = _messageView.ElementAt(i).Message;
Grid.SetRow(Message, ctr);
Grid.SetColumn(Message, 0);
ctr++;
Image Greentail = new Image();
Greentail.Source = temp2;
Greentail.HorizontalAlignment = HorizontalAlignment.Left;
Greentail.Height = 10;
Greentail.Width = 20;
Greentail.Margin = new Thickness(10, -(0.7), 5, 0);
Grid.SetRow(Greentail, ctr);
ctr++;
Label Sender = new Label();
Sender.Foreground = Brushes.White;
Sender.Margin = new Thickness(0, 0, 0, 10);
Sender.HorizontalAlignment = HorizontalAlignment.Left;
Sender.Content = "Sent By : " + _messageView.ElementAt(i).Name.ToString() + " " + _messageView.ElementAt(i).DateCreated.ToString();
Grid.SetRow(Sender, ctr);
Grid.SetColumn(Sender, 0);
ctr++;
chatGrid.Children.Add(Message);
chatGrid.Children.Add(Greentail);
chatGrid.Children.Add(Sender);
}
}
}
}
else
{
for (int i = 0; i < _messageView.Count; i++)
{
if (_messageView.ElementAt(i).IsMe == true && (!_messageView.ElementAt(i).Message.ToString().Trim().Equals("")))
{
RowDefinition chatGridRow1 = new RowDefinition();
RowDefinition chatGridRow2 = new RowDefinition();
RowDefinition chatGridRow3 = new RowDefinition();
chatGrid.RowDefinitions.Add(chatGridRow1);
chatGrid.RowDefinitions.Add(chatGridRow2);
chatGrid.RowDefinitions.Add(chatGridRow3);
TextBlock Message = new TextBlock();
Message.Foreground = Brushes.White;
Message.Margin = new Thickness(0, 10, 300, 0);
Message.Padding = new Thickness(10, 10, 10, 10);
Message.HorizontalAlignment = HorizontalAlignment.Left;
Message.Background = brush;
Message.TextWrapping = TextWrapping.Wrap;
Message.Text = _messageView.ElementAt(i).Message;
Grid.SetRow(Message, ctr);
Grid.SetColumn(Message, 0);
ctr++;
Image Greentail = new Image();
Greentail.Source = temp2;
Greentail.HorizontalAlignment = HorizontalAlignment.Left;
Greentail.Height = 10;
Greentail.Width = 20;
Greentail.Margin = new Thickness(5, -(0.7), 0, 0);
Grid.SetRow(Greentail, ctr);
ctr++;
Label Sender = new Label();
Sender.Foreground = Brushes.White;
Sender.Margin = new Thickness(0, 0, 0, 10);
Sender.Content = "Sent By : " + _messageView.ElementAt(i).Name.ToString() + " " + _messageView.ElementAt(i).DateCreated.ToString();
Grid.SetRow(Sender, ctr);
Grid.SetColumn(Sender, 0);
ctr++;
chatGrid.Children.Add(Message);
chatGrid.Children.Add(Greentail);
chatGrid.Children.Add(Sender);
}
}
}
//for (int i = 0; i < _messageView.Count; i++)
//{
// if (_messageView.ElementAt(i).IsMe == true && (!_messageView.ElementAt(i).Message.ToString().Trim().Equals("")))
// {
// }
//}
ctr = 0;
scrollView.ScrollToEnd();
}
private void ConstructChatView(Boolean isChat)
{
Dispatcher.Invoke((Action)(() => chatGrid.Children.Clear()));
}
private void ConstructChatView(Boolean isChat)
{
Dispatcher.Invoke((Action)(() =>
{
// more code here
}));
}
private void ConstructChatView(Boolean isChat)
{
Dispatcher.Invoke((Action)(() => ConstructChatViewInUI(isChat)));
}
private void ConstructChatViewInUI(Boolean isChat)
{
...
}