C# 将UserControl添加到StackPanel时发生ArgumentException

C# 将UserControl添加到StackPanel时发生ArgumentException,c#,silverlight,C#,Silverlight,当一个程序试图在DoSend方法中将WordBlock(这是我的类扩展UserControl)添加到StackPanel的内容时,它有时(实际上非常经常,特别是当查询返回多个结果时)抛出ArgumentException,这肯定与线程有关(SearchThreadEngine是第二个线程中运行的一个方法),但我在这个主题上很弱,不知道为什么会这样。所以,我很乐意接受任何帮助。 以下是堆栈跟踪: {System.ArgumentException: Value does not fall with

当一个程序试图在DoSend方法中将WordBlock(这是我的类扩展UserControl)添加到StackPanel的内容时,它有时(实际上非常经常,特别是当查询返回多个结果时)抛出ArgumentException,这肯定与线程有关(SearchThreadEngine是第二个线程中运行的一个方法),但我在这个主题上很弱,不知道为什么会这样。所以,我很乐意接受任何帮助。 以下是堆栈跟踪:

{System.ArgumentException: Value does not fall within the expected range.
at MS.Internal.XcpImports.CheckHResult(UInt32 hr)
at MS.Internal.XcpImports.Collection_AddValue[T](PresentationFrameworkCollection`1 collection, CValue value)
at MS.Internal.XcpImports.Collection_AddDependencyObject[T](PresentationFrameworkCollection`1 collection, DependencyObject value)
at System.Windows.PresentationFrameworkCollection`1.AddDependencyObject(DependencyObject value)
at System.Windows.Controls.UIElementCollection.AddInternal(UIElement value)
at System.Windows.PresentationFrameworkCollection`1.Add(T value)
at Dictionary.MainPage.DoSend(IQueryable`1 words, WordContext context)} System.Exception {System.ArgumentException}
public void DoSend(IQueryable单词,WordContext上下文)
{
Result.Children.Clear();
使用(上下文)
{
foreach(单词中的单词)
{
结果.Children.Add(新单词块(word));
}
waitHandle.Set();
}
}
公共无效搜索引擎()
{
而(!中止)
{
如果(ToSearch!=“”)
{
字符串toSearch=toSearch;
睡眠(200);
如果(toSearch!=toSearch)
继续;
WordContext wc=新的WordContext(WordContext.connectionString);
ToSearch=“”;
IQueryable result=(从wc.Words中的w开始,其中w.Foreign.Equals(toSearch)| | w.Foreign.StartsWith(toSearch+“”)选择w);
if(result.Count()==0)
结果=(从wc.Words中的w开始,其中w.Foreign.Equals(“to”+toSearch)| w.Foreign.StartsWith(“to”+toSearch+”)选择w);
如果(result.Count()!=0)
{
Result.Dispatcher.BeginInvoke(新SendResult(DoSend),新对象[]{Result,wc});
waitHandle.WaitOne();
}
}
}
中止=错误;
}

如果控件的名称与另一个控件的名称相同,则您将收到错误。每个成员必须具有唯一的名称。

控件名称为“this”,当我删除name=“this”从控制的xaml部分开始,一切都开始完美地工作,但我不太明白为什么。你能解释一下吗?它们必须有唯一的名称。因为你在
xaml
中命名了它们,所以它们都有相同的名称。
public void DoSend(IQueryable<Word> words, WordContext context)
{
    Result.Children.Clear();
    using (context)
    {

        foreach (Word word in words)
        {
            Result.Children.Add(new WordBlock(word));
        }
        waitHandle.Set();
    }

}
public void SearchThreadEngine()
{
    while (!abort)
    {

        if (ToSearch != "")
        {
            string toSearch = ToSearch;
            Thread.Sleep(200);
            if (toSearch != ToSearch)
                continue;
            WordContext wc = new WordContext(WordContext.connectionString);
            ToSearch = "";
            IQueryable<Word> result = (from w in wc.Words where w.Foreign.Equals(toSearch) || w.Foreign.StartsWith(toSearch+" ") select w);
            if(result.Count() == 0)
                result = (from w in wc.Words where w.Foreign.Equals("to "+toSearch) || w.Foreign.StartsWith("to "+toSearch + " ") select w);
            if (result.Count() != 0)
            {
                Result.Dispatcher.BeginInvoke(new SendResult(DoSend), new Object[] { result, wc });
                waitHandle.WaitOne();
            }

        }

    }
    abort = false;
}
Result.Children.Add(new WordBlock(word))