PDA

View Full Version : Loading app And Progress bar



reza1944
دوشنبه 27 آبان 1387, 10:07 صبح
مشكلي كه هيچ وقت حل نشد
با سلام

سوالي كه هزار بار مترح كردم و جواب از دوستان اساتيد نديدم اينكه من يه برنامه دارم يه دير بالا مياد حالا مي خوام با يك splash screen و يك progress bar مقدار لود برنامه رو نشون بدم چطوري امكان داره لطفا كمك كنيد.

shask00l
دوشنبه 27 آبان 1387, 12:05 عصر
دوست عزیز .
فازهای start up برنامه رو مشخص کن و بعد از انجام هر فاز مقدار progressbar رو تغییر بده .اگر هم دقیقا نمیدونی که این کار چغدر طول میکشه میتونی از proggress bar حلقوی یا بی نهایت استفاده کنی .
http://barnamenevis.org/forum/showthread.php?t=130515

ضمنا این مسئله شاید هزار بار توی این سایت مطرح نشده باشه ولی مطمئن باش بیش از 50 تاپیک در این زمینه میتونی پیدا کنی .

گاهی اوقات سرچ کردن سریع تر جواب میده تا سوال کردن .

ALI TT
دوشنبه 27 آبان 1387, 18:18 عصر
بهترین راه اینه :

نه کد اضافه می خواد و نه دردسر داره : مقدار Style اونو (progressbar) برابر Marquee قرار بده .

reza1944
دوشنبه 27 آبان 1387, 19:29 عصر
ممنون از اساتيد
آقاي ali TT وقتي splash رو توي برنامه قرار ميديم تا كامل لود نشه برنامه كه splash هم نمايش داده نميشه

reza1944
دوشنبه 27 آبان 1387, 19:38 عصر
و شكلي كه هنوز حل نشده است
please Sample

mostafaaa
دوشنبه 27 آبان 1387, 19:40 عصر
سلام دوست من
ببین اول باید مشخص کنید که چه نوع برنامه ای میخواهید بنویسید.و قبل از اجرای برنامه چه چیزهای و یا چه فایلهای باید لود بشه.
شما میتونی لود اولیه برنامت رو فقط محدود به همون SplashScreen بکنی و بقیه کارهات رو توی یه Thread دیگه انجام بدی و تا وقتی که Thread تموم نشده Splash رو در حالت نمایش برای کاربر نگه داری. بنا به نوع برنامه هم میتونی در هر لحضه گزارشی از مقدار پیشرفت Thread دریافت کنی و بوسیله Progress یه هر چیزه دیگه ای به کاربرت نشون بدی.

ALI TT
دوشنبه 27 آبان 1387, 21:37 عصر
ممنون از اساتيد
آقاي ali TT وقتي splash رو توي برنامه قرار ميديم تا كامل لود نشه برنامه كه splash هم نمايش داده نميشه
یکم واضح تر می گی ؟
شما Splash تون رو چه جوی لود می کنی .... خودت کدشو میدی یا از توی MyProject اونو ست می کنی ؟

reza1944
دوشنبه 27 آبان 1387, 22:19 عصر
حرف اقاي مصطفي درست خيلي ممنون استاد گرامي اما ميشه يه مثال بزاريد
خوب من يه برنامه نوشتم به بانك اطلاعاتي متصل است . خوب حال حدودا 20 فرم رو با كلي گزارش گيري و ماژول و كلاس در نظر بگيريد.
وقتي روي فايل اجراي كليك ميكني يه مدت زمان حالا تا 10 ثانيه طول ميكشه تا Main form ظاهر بشه اگه من باز هم Splash رو توي قسمت تنظيمات فرم اصلي قرار بدم باز هم همون 10 ثانيه بايد معتل ميشه
حالا من مي خوام تا وقتي روي فايل اجرايي كليك شد splash زود نمايش پيدا كنه بعد توي يك Progress bar مقدار لود برنامه نمايش داده بشه و وقتي برنامه به طور كامل توي رم قرار گرفت بعد فرم اصلي نمايش داده بشه .
اساتيد كلي از برنامه هاي شركتهاي مختلف كه ما با هاشون كار ميكنيم اينطوره مثلا برنامه مترجم پديده يا همون مشاور املاك هيرا و يا برنامه قدر photoshop

خيلي ممنون از اساتيدي كه كمك كنن حالا يا Sample بزارن

mostafaaa
سه شنبه 28 آبان 1387, 12:10 عصر
ببین دوست من یه مثال برات گزاشتم که یه دیتابیس که حدود صد هزار رکورد داره رو توی Splash لود میکنم و پروسش رو هم به وسیله ProgressBar نشون میدم . و زمانی که تموم شد پاسش میدم به فرم اصلی.
25601
کدهای فرم Splash هم به قرار زیره

Imports System.Data.OleDb
Imports System.ComponentModel
Public Class Splash
Dim ConnectionString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\Database1.accdb"
Dim Connectin As OleDbConnection
Dim Command As OleDbCommand
Dim DataAdapter As OleDbDataAdapter
Dim Dset As New DataSet
Dim WithEvents BG As BackgroundWorker
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.ProgressBar1.Maximum = 10
BG = New BackgroundWorker
BG.WorkerReportsProgress = True
BG.RunWorkerAsync()
End Sub
Private Sub BG_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BG.DoWork
Connectin = New OleDbConnection(ConnectionString)
Connectin.Open()
Command = New OleDbCommand("SELECT COUNT(*) FROM Table1", Connectin)
Dim Length As Integer = Command.ExecuteScalar
Command = New OleDbCommand("SELECT * FROM Table1", Connectin)
DataAdapter = New OleDbDataAdapter(Command)
Dim P As Integer = Length / 10
Dim Temp As Integer = 0
For i As Integer = 1 To 10
Me.DataAdapter.Fill(Me.Dset, Temp, P * i, "Table1")
Temp = (P * i) + 1
BG.ReportProgress(i)
Next
Connectin.Close()
End Sub

Private Sub BG_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles BG.ProgressChanged
Me.ProgressBar1.Value = e.ProgressPercentage
If e.ProgressPercentage = 10 Then
Dim Instance As New frmMain(Dset)
Instance.Show()
Me.Close()
End If
End Sub
End Class

reza1944
سه شنبه 28 آبان 1387, 13:36 عصر
خيلي ممنون اين براي ديتابيس اما براي لود يك Application چه كار كنيم ؟
فايل exe درست شده توسط نت وقتي روش كليك ميكني اول كلا همه ما‍ژول و فرم ها و غيره برسي ميشه وقتي خطا در كار نبود بعد برنامه اجرا ميشه
يك مدت زمان براي چك كردن تمام كد ها و برسي فرمها و InitializeComponent و ... طول ميكشه و بعد وفتي برنامه كلا توي رم لود شد فرم اصلي به نمايش در مياد حالا اين مدت زمان رو چطوري در دست گرفته و براي اون progress bar بزاريم .

اين قطعه كد رو برسي كنيد استاد ارجمند

Load frmProgress
With frmProgress.ProgressBar1
.Max = <number of progress bar parts>
.Value = 0

<read in registry values>
.Value = .Value + 1
DoEvents

<for each plugin to load>
<load plugin>
.Value = .Value + 1
DoEvents
<next plugin>

<initialize variables and objects group 1>
.Value = .Value + 1
DoEvents

<initialize variables and objects group 2>
.Value = .Value + 1
DoEvents

' Repeat for each group of variables
' and objects you initialize

<initialize variables and objects group n>
.Value = .Value + 1
DoEvents

<initialize interface>
.Value = .Value + 1
DoEvents

End With
Unload frmProgress

باز هم سپاس گذار از اساتيد ارجمند

reza1944
سه شنبه 28 آبان 1387, 13:38 عصر
مشكل سر جاي خود باقي است

mostafaaa
سه شنبه 28 آبان 1387, 17:34 عصر
دوست من کدهات رو توی تگ شارپ "#" قرار بده تا قابل خوندن باشه.

reza1944
سه شنبه 28 آبان 1387, 21:33 عصر
معذرت دوست عزيز

توي properties پروژه ، splash screen داريم . فرم splash رو ست ميكنيم تا اينجا همه چيز درست اما مي تونيد يك كم دو مورد اون دكمه . view application events و اين كد


Namespace My
' The following events are availble for MyApplication:
'
' Startup: Raised when the application starts, before the startup form is created.
' Shutdown: Raised after all application forms are closed. This event is not raised if the application terminates abnormally.
' UnhandledException: Raised if the application encounters an unhandled exception.
' StartupNextInstance: Raised when launching a single-instance application and the application is already active.
' NetworkAvailabilityChanged: Raised when the network connection is connected or disconnected.
Partial Friend Class MyApplication
Private Sub MyApplication_Startup(ByVal sender As Object, ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupE ventArgs) Handles Me.Startup
End Sub
End Class
End Namespace

reza1944
سه شنبه 28 آبان 1387, 21:37 عصر
شايد توي اين قسمت بتوني كدها يك progress bar رو بنويسي اما چطوري ؟