Cześć, jestem w trakcie nauki pisania w C#, szło wszystko gładko aż w pewnym momencie kiedy chcę uruchomić swoje wypociny wyskakuje mi taki alert :
" An exception of type 'System.Exception' occurred in mscorlib.dll but was not handled in user code
WinRT information: Element is already the child of another element.
Additional information: No installed components were detected.
Element is already the child of another element. "
Nie mam pojęcia co zrobiłem źle i już mam dosyć studiowania ciągle tego kodu w poszukiwaniu błędu. Osobiście uważam, że program wali się przy "playArea.Children.Add" bo po usunięciu tych 3 linijek program działa ale są mi one potrzebne.
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
using Windows.UI.Xaml.Media.Animation;
// The Basic Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=234237
namespace Ratuj_ludzi
{
/// <summary>
/// A basic page that provides characteristics common to most applications.
/// </summary>
public sealed partial class MainPage : Ratuj_ludzi.Common.LayoutAwarePage
{
Random random = new Random();
DispatcherTimer enemyTimer = new DispatcherTimer();
DispatcherTimer targetTimer = new DispatcherTimer();
bool humanCaptured = false;
public MainPage()
{
this.InitializeComponent();
enemyTimer.Tick += EnemyTimer_Tick;
enemyTimer.Interval = TimeSpan.FromSeconds(2);
targetTimer.Tick += TargetTimer_Tick;
targetTimer.Interval = TimeSpan.FromSeconds(1);
}
private void TargetTimer_Tick(object sender, object e)
{
progressBar.Value += 1;
if (progressBar.Value >= progressBar.Maximum)
EndTheGame();
}
private void EndTheGame()
{
if (!playArea.Children.Contains(gameOverText))
{
enemyTimer.Stop();
targetTimer.Stop();
humanCaptured = false;
startButton.Visibility = Visibility.Visible;
playArea.Children.Add(gameOverText);
}
}
private void EnemyTimer_Tick(object sender, object e)
{
AddEnemy();
}
/// <summary>
/// Populates the page with content passed during navigation. Any saved state is also
/// provided when recreating a page from a prior session.
/// </summary>
/// <param name="navigationParameter">The parameter value passed to
/// <see cref="Frame.Navigate(Type, Object)"/> when this page was initially requested.
/// </param>
/// <param name="pageState">A dictionary of state preserved by this page during an earlier
/// session. This will be null the first time a page is visited.</param>
protected override void LoadState(Object navigationParameter, Dictionary<String, Object> pageState)
{
}
/// <summary>
/// Preserves state associated with this page in case the application is suspended or the
/// page is discarded from the navigation cache. Values must conform to the serialization
/// requirements of <see cref="SuspensionManager.SessionState"/>.
/// </summary>
/// <param name="pageState">An empty dictionary to be populated with serializable state.</param>
protected override void SaveState(Dictionary<String, Object> pageState)
{
}
private void startButton_Click(object sender, RoutedEventArgs e)
{
StartGame();
}
private void StartGame()
{
human.IsHitTestVisible = true;
humanCaptured = false;
progressBar.Value = 0;
startButton.Visibility = Visibility.Collapsed;
playArea.Children.Clear();
playArea.Children.Add(target);
playArea.Children.Add(human);
enemyTimer.Start();
targetTimer.Start();
}
private void AddEnemy()
{
ContentControl enemy = new ContentControl();
enemy.Template = Resources["EnemyTemplate"] as ControlTemplate;
AnimateEnemy(enemy, 0, playArea.ActualWidth - 100, "(Canvas.Left)");
AnimateEnemy(enemy, random.Next((int)playArea.ActualHeight - 100),
random.Next((int)playArea.ActualHeight - 100), "(Canvas.Top)");
playArea.Children.Add(enemy);
}
private void AnimateEnemy(ContentControl enemy, double from, double to, string propertyToAnimate)
{
Storyboard storyboard = new Storyboard() {AutoReverse = true, RepeatBehavior = RepeatBehavior.Forever };
DoubleAnimation animation = new DoubleAnimation()
{
From = from,
To = to,
Duration = new Duration(TimeSpan.FromSeconds(random.Next(4, 6)))
};
Storyboard.SetTarget(animation, enemy);
Storyboard.SetTargetProperty(animation, propertyToAnimate);
storyboard.Children.Add(animation);
storyboard.Begin();
}
}
}