Author Topic: make a program running immediatly at the first execution  (Read 6364 times)

0 Members and 1 Guest are viewing this topic.

samideqlqpart

  • Newt
  • Posts: 40
Re: make a program running immediatly at the first execution
« Reply #15 on: August 05, 2017, 08:11:10 AM »
hello
Mr Yuan have you the code in vb.net
cause my converter has problem with+=

public dlgProgress(
            ILongProcessingObject executingObj)
            : this()
        {
            _executingObject = executingObj;

            _executingObject.ProcessingStarted +=
                new LongProcessStarted(ExecutingObject_ProcessStarted);
            _executingObject.ProcessingProgressed +=
                new LongProcessingProgressed(ExecutingObject_Progressed);
            _executingObject.ProcessingEnded +=
                new EventHandler(ExecutingObject_ProcessEnded);
            _executingObject.CloseProgressUIRequested +=
               new EventHandler(ExecutingObject_CloseProgressUIRequested);
        }

Keith Brown

  • Swamp Rat
  • Posts: 601
Re: make a program running immediatly at the first execution
« Reply #16 on: August 05, 2017, 08:20:24 AM »
Use AddHandler and AddressOf in VB.NET.  All the code is doing is subscribing to events.


So for the first event you would have


AddHandler _executingObject.ProcessingStarted, AddressOf ExecutingObject_ProcessStarted.



Keith Brown | AutoCAD MEP Blog | RSS Feed
AutoCAD MEP 2014 / Revit MEP 2014 / EastCoast CAD/CAM addon / Visual Studio 2013

samideqlqpart

  • Newt
  • Posts: 40
Re: make a program running immediatly at the first execution
« Reply #17 on: August 06, 2017, 07:11:07 PM »
i'm lost
what i have to do for displaying a progressbar  during this long time of waiting?
from the press the button of execution until the dispay of the drawing
to allow autocad load dll
ToolStripProgressBar...? doEvent....?
what are steps to do
thank you


MexicanCustard

  • Swamp Rat
  • Posts: 705
Re: make a program running immediatly at the first execution
« Reply #18 on: August 08, 2017, 07:30:20 AM »
i'm lost
what i have to do for displaying a progressbar  during this long time of waiting?
from the press the button of execution until the dispay of the drawing
to allow autocad load dll
ToolStripProgressBar...? doEvent....?
what are steps to do
thank you

Progress Bars get complicated in AutoCAD since database manipulation has to happen on the UI thread. You can you use AutoCAD's built in ProgressMeter().  Not great but better than nothing. Check out Kenan's Blog.  Or Norman's  Blog.
Revit 2019, AMEP 2019 64bit Win 10

samideqlqpart

  • Newt
  • Posts: 40
Re: make a program running immediatly at the first execution
« Reply #19 on: August 09, 2017, 04:09:42 AM »
hi
yes i 've found it
and there is code in vb.net(with converter..)
Imports Autodesk.AutoCAD.Runtime
Imports System.Runtime.InteropServices
Imports System.Windows.Forms
Namespace ProgressMeterTest
    Public Class Cmds
        <CommandMethod("PB")> _
        Public Sub ProgressBarManaged()
            Dim pm As New ProgressMeter()
            pm.Start("Testing Progress Bar")
            pm.SetLimit(100)
            ' Now our lengthy operation
            For i As Integer = 0 To 100
                System.Threading.Thread.Sleep(5)
                ' Increment Progress Meter...
                pm.MeterProgress()
                ' This allows AutoCAD to repaint
                Application.DoEvents()
            Next
            pm.[Stop]()
        End Sub
    End Class
End Namespace


and an other most interresting code

Imports System
Imports System.Collections.Generic
Imports System.Windows.Forms
Imports System.ComponentModel



Class FibonacciNumber
    Inherits Form

   
    Private progressStatusStrip As StatusStrip
    Private toolStripProgressBar As ToolStripProgressBar
    Private requestedCountControl As NumericUpDown
    Private goButton As Button
    Private outputTextBox As TextBox
    Private backgroundWorker As BackgroundWorker
    Private toolStripStatusLabel As ToolStripStatusLabel
    Private requestedCount As Integer


    Public Sub New()
        [Text] = "Fibonacci"

        ' Prepare the StatusStrip.
        progressStatusStrip = New StatusStrip()
        toolStripProgressBar = New ToolStripProgressBar()
        toolStripProgressBar.Enabled = False
        toolStripStatusLabel = New ToolStripStatusLabel()
        progressStatusStrip.Items.Add(toolStripProgressBar)
        progressStatusStrip.Items.Add(toolStripStatusLabel)

        Dim flp As New FlowLayoutPanel()
        flp.Dock = DockStyle.Top

        Dim beforeLabel As New Label()
        beforeLabel.Text = "Calculate the first "
        beforeLabel.AutoSize = True
        flp.Controls.Add(beforeLabel)
        requestedCountControl = New NumericUpDown()
        requestedCountControl.Maximum = 1000
        requestedCountControl.Minimum = 1
        requestedCountControl.Value = 100
        flp.Controls.Add(requestedCountControl)
        Dim afterLabel As New Label()
        afterLabel.Text = "Numbers in the Fibonacci sequence."
        afterLabel.AutoSize = True
        flp.Controls.Add(afterLabel)

        goButton = New Button()
        goButton.Text = "&Go"
        AddHandler goButton.Click, AddressOf button1_Click
        flp.Controls.Add(goButton)

        outputTextBox = New TextBox()
        outputTextBox.Multiline = True
        outputTextBox.ReadOnly = True
        outputTextBox.ScrollBars = ScrollBars.Vertical
        outputTextBox.Dock = DockStyle.Fill

        Controls.Add(outputTextBox)
        Controls.Add(progressStatusStrip)
        Controls.Add(flp)

        backgroundWorker = New BackgroundWorker()
        backgroundWorker.WorkerReportsProgress = True
        AddHandler backgroundWorker.DoWork, AddressOf backgroundWorker1_DoWork
        AddHandler backgroundWorker.RunWorkerCompleted, AddressOf backgroundWorker1_RunWorkerCompleted
        AddHandler backgroundWorker.ProgressChanged, AddressOf backgroundWorker1_ProgressChanged
    End Sub


    Private Sub backgroundWorker1_DoWork(sender As Object, e As DoWorkEventArgs)
        ' This method will run on a thread other than the UI thread.
        ' Be sure not to manipulate any Windows Forms controls created
        ' on the UI thread from this method.
        backgroundWorker.ReportProgress(0, "Working...")
        Dim lastlast As [Decimal] = 0
        Dim last As [Decimal] = 1
        Dim current As [Decimal]
        If requestedCount >= 1 Then
            AppendNumber(0)
        End If
        If requestedCount >= 2 Then
            AppendNumber(1)
        End If
        Dim i As Integer

        While i < requestedCount
            ' Calculate the number.
            current = lastlast + last
            ' Introduce some delay to simulate a more complicated calculation.
            System.Threading.Thread.Sleep(100)
            AppendNumber(current)
            backgroundWorker.ReportProgress(100 * i / requestedCount, "Working...")
            ' Get ready for the next iteration.
            lastlast = last
            last = current
            i += 1
        End While


        backgroundWorker.ReportProgress(100, "Complete!")
    End Sub


    Delegate Sub AppendNumberDelegate(number As [Decimal])

    Private Sub AppendNumber(number As [Decimal])
        If outputTextBox.InvokeRequired Then
            outputTextBox.Invoke(New AppendNumberDelegate(AddressOf AppendNumber), number)
        Else
            outputTextBox.AppendText((number.ToString("N0") + Environment.NewLine))
        End If
    End Sub
    Private Sub backgroundWorker1_ProgressChanged(sender As Object, e As ProgressChangedEventArgs)
        toolStripProgressBar.Value = e.ProgressPercentage
        toolStripStatusLabel.Text = e.UserState '
    End Sub


    Private Sub backgroundWorker1_RunWorkerCompleted(sender As Object, e As RunWorkerCompletedEventArgs)
        If TypeOf e.Error Is OverflowException Then
            outputTextBox.AppendText((Environment.NewLine + "**OVERFLOW ERROR, number is too large to be represented by the decimal data type**"))
        End If
        toolStripProgressBar.Enabled = False
        requestedCountControl.Enabled = True
        goButton.Enabled = True
    End Sub


    Private Sub button1_Click(sender As Object, e As EventArgs)
        goButton.Enabled = False
        toolStripProgressBar.Enabled = True
        requestedCount = Fix(requestedCountControl.Value)
        requestedCountControl.Enabled = False
        outputTextBox.Clear()
        backgroundWorker.RunWorkerAsync()
    End Sub
End Class

now i'm searching how to launch the progress meter  at the same time as my application start and not after
or exactly how to fix the max of the progressmeter to the end of dll's load
thank you


samideqlqpart

  • Newt
  • Posts: 40
Re: make a program running immediatly at the first execution
« Reply #20 on: August 11, 2017, 10:22:14 AM »

my big problem is
HOW TO SET THE MAX OF PROGRESS BAR?
Who it's corresponding to the  apparition of my drawing
trannks

samideqlqpart

  • Newt
  • Posts: 40
Re: make a program running immediatly at the first execution
« Reply #21 on: August 12, 2017, 07:07:32 AM »
or how to estimate the remaining time and display it.
 

samideqlqpart

  • Newt
  • Posts: 40
Re: make a program running immediatly at the first execution
« Reply #22 on: October 05, 2017, 07:07:23 AM »
hi
How to fill or to keep users waiting?
from the moment the user specifies the insertion point until when the code finishes the drawing.
with message or progressbar..
as this moment how to set the "setlimit"
thanks

It's Alive!

  • Retired
  • Needs a day job
  • Posts: 8662
  • AKA Daniel
Re: make a program running immediatly at the first execution
« Reply #23 on: October 06, 2017, 04:49:55 AM »
How to fill or to keep users waiting?

Some nice elevator music?
<iframe width="854" height="480" src="https://www.youtube.com/embed/jj0ChLVTpaA" frameborder="0" allowfullscreen></iframe>

kdub_nz

  • Mesozoic keyThumper
  • SuperMod
  • Water Moccasin
  • Posts: 2125
  • class keyThumper<T>:ILazy<T>
Re: make a program running immediatly at the first execution
« Reply #24 on: October 06, 2017, 05:13:56 AM »
Called Kerry in my other life
Retired; but they dragged me back in !

I live at UTC + 13.00

---
some people complain about loading the dishwasher.
Sometimes the question is more important than the answer.

samideqlqpart

  • Newt
  • Posts: 40
Re: make a program running immediatly at the first execution
« Reply #25 on: October 09, 2017, 04:59:51 AM »
yeah
not bad idea!!!!!!