【发布时间】:2010-12-24 21:01:07
【问题描述】:
几天前我开始使用 C# (WPF) 进行多线程编程,但这里有一个我无法解决的问题……我正在使用这段代码:
void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
Random foodPosition = new Random();
double x,y;
Size size = new Size(30,30);
bool foodCreated = false;
Ellipse food = null;
Food foodObject = null;
Thread foodThread = new Thread(new ThreadStart(() =>
{
field.Dispatcher.Invoke(new Action(() =>
{
food = new Ellipse();
food.Fill = GenerateColor();
food.Width = size.Width;
food.Height = size.Height;
x = foodPosition.Next(0, (int)(playGroundSize.Width - size.Width) + 1);
y = foodPosition.Next(0, (int)(playGroundSize.Height - size.Height) + 1);
if (IsFree(x, y, size, 0))
{
playField.Children.Add(food);
Canvas.SetTop(food, y);
Canvas.SetLeft(food, x);
foodObject = new Food(food, new Point(x, y));
foodCollection.Add(foodObject,0);
foodCreated = true;
}
}));
if (foodCreated)
{
for (int i = 0; i < foodAliveTime; i++)
{
Thread.Sleep(1000);
foodCollection[foodObject]++;
}
field.Dispatcher.Invoke(new Action(() =>
{
playField.Children.Remove(foodObject.FoodObject);
//threadList[foodObject].Abort();
}));
}
}));
foodThread.Start();
}
我认为问题出在上面的代码上。在我的程序运行大约一分钟后抛出异常。这是一个例外:
未处理的类型异常 'System.Reflection.TargetInvocationException' 发生在 mscorlib.dll 中
附加信息:异常有 被目标抛出 调用。
然后我收到这条消息:
没有可用的源代码 当前位置。
我知道我的源代码有点丑,等我解决了这个问题我会改进它。你能告诉我如何解决它吗?
【问题讨论】:
-
内部异常是什么?另外,我问了另一个涉及相同问题的问题:stackoverflow.com/questions/4269463/…它可能对你有用,虽然我从来没有得到正确的答案
-
第二; .InnerException 是这里的关键
标签: c# .net wpf multithreading targetinvocationexception