C# to VB.NET   zodpovězená otázka

VB.NET

Dobrý den,

věděl by někdo jak napsat toto ve VB.NET (nejlépe, aby to bylo funkční v CF 2.0) ?

  private void ProgressDispatcherProc()
    {
      m_stopThreads = false;

      while (!m_stopThreads)
      {
        while (m_progressQueue.Count > 0)
        {
          ProgressChangedEventArgs args = m_progressQueue.Dequeue();

          if (ProgressChanged != null)
          {
            m_guiMarshaller.BeginInvoke(new MethodInvoker(delegate()
            {
              ProgressChanged(this, args);
            }));
            Application.DoEvents();
          }
        }
  
        Thread.Sleep(this.WorkerReportsProgress ? 5 : 1000);
      }
    }

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

Private Sub ProgressDispatcherProc()
    m_stopThreads = False
    
    While Not m_stopThreads
        While m_progressQueue.Count > 0
            Dim args As ProgressChangedEventArgs = m_progressQueue.Dequeue()
            
            If ProgressChanged IsNot Nothing Then
                m_guiMarshaller.BeginInvoke(New MethodInvoker(Function() Do
                    ProgressChanged(Me, args)
                End Function))
                Application.DoEvents()
            End If
        End While
        
        Thread.Sleep(If(Me.WorkerReportsProgress, 5, 1000))
    End While
End Sub

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

Tohle je překlad z:

http://www.developerfusion.com/tools/con...

nebo něčeho podobného.

Mno problém je s tímhle:

 If ProgressChanged IsNot Nothing Then
                        m_guiMarshaller.BeginInvoke(New MethodInvoker(Function() Do
                            ProgressChanged(Me, args)
                        End Function))

m_guiMarshaller je typu System.Windows.Forms.Control

ProgressChanged je událost. pokud to dobře chápu tak přes delegáta vstupuji do volajícího vlákna vyvoláním události ProgressChanged.

Ve VB by normálně asi stačilo zavolat událost raiseevent progressChanged. Jenže nevím jak to udělat do spouštěcího vlákna.

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

Nepomôže pridať pred názov eventu to RaiseEvent ?

 If ProgressChanged IsNot Nothing Then
                        m_guiMarshaller.BeginInvoke(New MethodInvoker(Function() Do
                            RaiseEvent ProgressChanged(Me, args)
                        End Function))

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

Mno já si myslím, že je chyba na předchozím řádku.

I ten překladač na DeveloperFusion hlásí varování:

VB does not support anonymous methods/lambda expressions with a statement body

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

Změňte Function na Sub, problém je v tom, že to nic nevrací. Ale btw tohle v CF nepůjde, protože ten neumí .NET 4 a tahle funkcionalita je k dispozici až od Visual Studia 2010.

Tu funkci dejte úplně mimo, jako klasickou funkci ve třídě s názvem a použijte ji přes New MethodInvoker(AddressOf názevFunkce).

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

Děkuji funguje.

           Private args As ProgressChangedEventArgs
            Private Sub ProgressDispatcherProc()

                m_stopThreads = False

                While Not m_stopThreads

                    While m_progressQueue.Count > 0

                        args = m_progressQueue.Dequeue()

                        m_guiMarshaller.BeginInvoke(New MethodInvoker(AddressOf CallProgressChanged))

                        Application.DoEvents()

                    End While

                    Thread.Sleep(If(Me.WorkerReportsProgress, 5, 1000))

                End While

            End Sub
            Private Sub CallProgressChanged()
                RaiseEvent ProgressChanged(Me, args)
            End Sub

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