GELÖST Windows Phone 7 / Silverlight...komisches Resultat

Diskutiere Windows Phone 7 / Silverlight...komisches Resultat im Programmierung Forum im Bereich Software Forum; Ok...es ist der 15.3 und die Dev Tools kamen erst vor ein paar Stunden raus aber es könnte auch ein Überlegungsfehler im Code selbst sein. Also...
B

bluefisch200

Threadstarter
Mitglied seit
18.10.2007
Beiträge
2.463
Ok...es ist der 15.3 und die Dev Tools kamen erst vor ein paar Stunden raus aber es könnte auch ein Überlegungsfehler im Code selbst sein.

Also, um das Ganz ein wenig an zu testen wollte eine App schreiben welche Primzahlen berechnet und Auflistet. Dabei muss es möglich sein den Vorgang jeder Zeit zu unterbrechen und fort zu setzen.

Dies klappt eigentlich relativ gut nur ist das Resultat mehr als verwirrend da gewisse Resultate mehrfach aufgeführt werden und andere gar nicht...es ist irgendwie auch kein Darstellungsfehler oder so etwas da es sich beim Scrollen etc. nicht ändert...ich weis nicht ob ich einen banalen Fehler gemacht habe oder nicht...

Der englische kommentierte Teil wurde generiert und sollte eigentlich stimmen...

Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;
using System.Windows.Navigation;
using System.Threading;

namespace WindowsPhoneTest_App
{
    public partial class MainPage : PhoneApplicationPage
    {
        object _selectedItem;
        Thread oThread;
        int counter = 2;
        public MainPage()
        {
            InitializeComponent();

            SupportedOrientations = SupportedPageOrientation.Portrait;
            Loaded += new RoutedEventHandler(MainPage_Loaded);

            PageTransitionList.Completed += new EventHandler(PageTransitionList_Completed);

            // Set the data context of the listbox control to the sample data
            DataContext = new MainViewModel();
            
        }

        private void MainPage_Loaded(object sender, RoutedEventArgs e)
        {
            // Reset page transition
           // ResetPageTransitionList.Begin();
        }
        private void ListBoxOne_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            // Capture selected item data
            _selectedItem = (sender as ListBox).SelectedItem;

            // Start page transition animation
            PageTransitionList.Begin();
        }

        private void PageTransitionList_Completed(object sender, EventArgs e)
        {
            // Set datacontext of details page to selected listbox item
            NavigationService.Navigate(new Uri("/DetailsPage.xaml", UriKind.Relative));
            FrameworkElement root = Application.Current.RootVisual as FrameworkElement;
            root.DataContext = _selectedItem;
        }
        private bool Running = false;
        private void button1_Click(object sender, RoutedEventArgs e)
        {
            oThread = new Thread(new ThreadStart(calculatePrimeNumbers));
            if (Running)
            {
                Running = false;
                while (oThread.IsAlive) ;
                button1.Content = "Continue";
            }
            else
            {
                oThread.Start();
                button1.Content = "Pause";
                Running = true;
            }
        }
        
        private void calculatePrimeNumbers()
        {
            while (Running)
            {
                bool noprime = false;
                for (int i = counter - 1; i > 1; i--)
                {
                    int result = counter / i;
                    if (result * i == counter)
                    {
                        noprime = true;
                        i = 1;
                    }
                }
                if (noprime == false)
                {
                    Dispatcher.BeginInvoke(() => Results.Items.Add(counter.ToString()));

                }
                counter++;
            }
        }
    }
}
 

Anhänge

B

bluefisch200

Threadstarter
Mitglied seit
18.10.2007
Beiträge
2.463
Auch wenn ich gewusst habe dass ich hier eher weniger eine Antwort erhalten werde so will ich zumindest die Lösung kurz herüber geben welche ich im MSDN Forum erhalten habe.

The behavior you're seeing is expected. Here is what happens:
- You run a worker thread to calculate prime numbers (call it thread A).
- Dispatcher.BeginInvoke(): This will add the anonymous delegate to be executed in the UI thread.

The problem occurs because there is a good amount of delay between the CPU switching the thread A and the UI thread. So if the execution is in UI thread and it doesn't get into thread A for a few seconds, the counter remains the same. Hence you see the same counter value being added to the list number of times.

In desktop silverlight, the time delay between threads switch is less - so between two calls to the UI thread, the thread A gets called and counter gets updated. Hence you may/may not see the difference.
Quelle: http://social.msdn.microsoft.com/Forums/en-US/windowsphone7series/thread/9047d5e5-80e2-4e4b-93b4-8dcf2a13deb6
 
Thema:

Windows Phone 7 / Silverlight...komisches Resultat

Windows Phone 7 / Silverlight...komisches Resultat - Ähnliche Themen

  • Windows Phone Nokia Lumia 520 und WhatsApp

    Windows Phone Nokia Lumia 520 und WhatsApp: Seit Donnerstagmittag, 14.11.19, ist mein WhatsApp - ohne Vorwarnung - auf meinem Windows 8.1 Phone Nokia Lumia 520 blockiert und ich werde zur...
  • windows phone sync of contacts

    windows phone sync of contacts: error code 0x85050020
  • windows phone sync of contacts

    windows phone sync of contacts: error code 0x85050020
  • Termin von Windows Phone (Win10) wird in Outlook.com und in Outlook365 am PC mit falscher Zeitzone angezeigt!?

    Termin von Windows Phone (Win10) wird in Outlook.com und in Outlook365 am PC mit falscher Zeitzone angezeigt!?: Hallo, genau wie schon hier beschrieben, liegt bei mir das gleiche Problem vor - leider hat es sich bisher noch nicht von alleine gelöst...
  • Welche Apps sind Windows Phone 8 bzw. Silverlight Apps?

    Welche Apps sind Windows Phone 8 bzw. Silverlight Apps?: Hallo Anhand der neuen Infos, dass bald keine Windows Phone 8 bzw. Silverlight Apps unterstützt werden will ich nun Wissen, welche Apps davon...
  • Ähnliche Themen

    Oben