Vykreslení grafu během dlouhotrvajícío výpočtu   zodpovězená otázka

VB.NET, WinForms

Dobrý den,

Při dlouhotrvajících výpočtech chci znázornit graficky změny proměnných.

V přiloženém prográmku jsem neuspěl ani s akcí, ani s timerem. Jsem samouk a nemám se koho zeptat. V MSDN jsem podobný příklad nenašel. Graf by se měl objevit buď po skončení vnitřní smyčky nebo za určitý časový interval (třeba 50 sec). Budu vděčný za každé chodící řešení.

Imports Microsoft.VisualBasic
Imports System
Imports System.Drawing
'Imports System.Threading
Imports System.String
Imports System.Math

Public Class Form1
    Dim NX(10), NY(1, 10) As Integer
    Dim Nind, Nroz As Integer

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _
    Handles Button1.Click
        Dim J, K, L, N, Nroz, Nind As Integer
        Dim NX(10), NY(1, 10) As Double


        Me.TextBox1.Text = "start"

        For N = 0 To 5
            Beep()

            Nroz = 1
            Nind = 10
            For J = 0 To 300000
                For K = 0 To Nind
                    NX(K) = K
                    For L = 0 To Nroz
                        NY(L, K) = 150 + Sin(L + 0.4 * K + 0.3 * N)
                    Next
                Next
            Next
            'má se objevit obrázek
        Next N
    End Sub


    Public Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click 'Timer1.Tick
        PictureBox1.Dock = DockStyle.Fill
        PictureBox1.BackColor = Color.White
        AddHandler PictureBox1.Paint, AddressOf Me.pictureBox1_Paint
        Me.Controls.Add(PictureBox1)
    End Sub



    Private Sub pictureBox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs)
        Dim g As Graphics = e.Graphics
        Dim J, K As Integer
        g.DrawString("Soubor CVBHGHFD", _
            New Font("Arial", 10), Brushes.Black, New PointF(30.0F, 30.0F))


        For K = 0 To Nroz
            For J = 0 To Nind - 1

                If K = 0 Then g.DrawLine(System.Drawing.Pens.Green, NX(J), NY(K, J), NX(J + 1), NY(K, J + 1))
                If K = 1 Then g.DrawLine(System.Drawing.Pens.Blue, NX(J), NY(K, J), NX(J + 1), NY(K, J + 1))
            Next

        Next
    End Sub



End Class

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Napadá mě, že byste mohl použít komponentu BackgroundWorker, která Vám zjednoduší spustit výpočet v druhém vlákně (příkladů naleznete dost) a v proceduře BackgroundWorkeru provádět výpočet a po každém skončení vnitřní smyčky zavolat WorkerProgressChanged a jako argument předat nějaké kritické hodnoty. Událost workeru pak odchytnete a kreslit budete v ní.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Musím se přiznat, že jsem se pokoušel postupovat podle navrženého postupu , ale neúspěšně. Můžete mně odkázat na nějaký podobný příklad? Děkuji předem.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pěkný příklad najdete zde na webu ve videotutoriálech.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback