مشاهده نسخه کامل
: Splash Screen in C# - Visual Studio 2008
Smartie7
08-08-2010, 21:42
سلام
دوستان لطف کنید شیوه ی ایجاد یه splash screen ساده با زبان C# رو اینجا بزارید.
لطفا توضیح بدید Threading چی هست؟
alidata2010
08-08-2010, 21:54
چگونه یک Splash را در C# بسازیم؟
برای ساخت یک Splash ساده در Windows Forms Application،کافیست مراحل زیر را طی کنید:
1) ابتدا یک فرم جدید به پروژه بیافزایید.برای راحتی ما نام این فرم جدید را SplashForm می گذاریم.
2) SplashForm را،هرگونه تمایل دارید طراحی کنید.در طراحی اینگونه فرم ها معمولا فقط از آیکون،تصاویر یا نوشته های ثابت استفاده شده و از کنترل هایی که برای تعامل با کاربر در نظر گرفته شده اند (مانند TextBox ، ComboBox و...) خبری نیست.همچنین معمولا خاصیت هایی زیر را در طراحی (برای زیبایی)،به فرم القا می کنند:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
معمولا در این فرمها ،هیچ Event یا رویدادی هم پیاده سازی نمی شود.
3) در کلاس Program (در فایل Program.cs) یک متغیر Public Static از نوع SplashForm با نام splash معرفی و با null مقدار دهی کنید.
4) در تابع Main کلاس Program به جای خط زیر (فرض بر این است که فرم اصلی برنامه با نام Form1 می باشد)
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
این خطوط را بنویسید
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
در این خطوط ابتدا یک فرم splash ساخته و نمایش می دهید.سپس اقدام به بارگذاری فرم Form1 نموده و در خط چهارم،با دستور Refresh،به فرم splash دستور می دهید که خود را در بالای(جلوتر از) فرم اصلی بار گذاری کند.در نهایت هم در متد Run،فرم اصلی برنامه را برای نمایش مشخص می کنیم.
5) رویداد Form_Load فرم Form1 را دریافت کرده و در اولین خط آن عبارت
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
و در آخرین خط این متد دستور
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
را وارد کنید.
در این قسمت ،در اولین خط این متد،splash را به روی فرم اصلی آورده و در آخرین خط این متد نیز (پس از انجام عملیات بار گذاری فرم) اقدام به بستن فرم splash می کند.
در بین این دو خط عملیات بار گذاری برنامه (که معمولا طولانی است) انجام می شود.
6) تمام![ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
Smartie7
08-08-2010, 22:38
این دیگه خیلی ساده بود! :دی
من خودم خیلی کد واسه splash screen پیدا کردم ولی میخوام یه نفر توضیح بده که مثلا Threading چیه و ...
خط به خط برنامه رو آنالیز کنه ...
از دو راه میشه Splash Screen ساخت:
1) با استفاده از Timer
2) با استفاده از Theard
با تایمر که کاری نداره!
اگه یه نفر لطف کنه این 2 تا خط کد مشخص شده رو توضیح بده ممنون میشم.
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
alidata2010
08-08-2010, 23:09
با پروگرس بار هم میشه این یکی جدیده خودم اختراع کردم:31:
alidata2010
08-08-2010, 23:21
اینارو بخون شاید چیزی فهمیدی :
مقدمه :
Thread ها ابزاری مفید هستند که به کاربر اجازه می دهند تا اعمالی را به صورت موازی (Parallel) و همزمان انجام دهد. با استفاده از Thread ها، از امکانات MultiTasking در یک برنامه استفاده می کنید. در ضمن می توانید یک قسمت از برنامه را متوقف و یا به جریان بیندازید. در استفاده از Threadها بسیار مراقب باشید چون منابع شما محدود هستند.
Threadها هنگامی که باید منتظر پاسخ بخشی دیگر از برنامه باشید، بسیار به کار می آیند و شما می توانید در حالی که بخشی از برنامه متوقف است و منتظر پاسخ است بقیه قسمت ها را پیش ببرید که سرعت برنامه های شما را به طرز قابل ملاحظه ای افزایش می دهد..
در C# کلاسهایی برای استفاده از Thread ها وجود دارندکه در System.Threading قرار دارند. در ادامه یک مورد ساده ی استفاده از Thread شرح داده می شود. امید است که مورد استفاده واقع شود.
کار با Thread ها :
در ابتدا باید یک Object از نوع System.Threading.Thread ایجاد کنید. کلاس Thread تنها یک ایجادکننده (Constructor) دارد که یک ThreadStart (که یک Delegate است) می گیرد. برای توابع static می توان مستقیما نام تابع را ارسال کرد. تابع نوشته شده باید هیچ پارامتری نداشته باشد و هیچ مقداری را نیز برنگرداند (یعنی void باشد) به این علت که تابع اصلی این گونه تعریف شده است.
public static void MyCallbackFunction()
{
while (true)
{
System.Console.WriteLine(“ Hey!, My Thread Function Running”);
}
}
Thread MyThread = new Thread(new ThreadStart (MyCallbackFunction));
MyThread.Start();
بعد از ایجاد Thread می توانید آن را با Start، شروع کنید. Thread را می توانید با Abort بکشید که باعث ایجاد یک ThreadAbortException خواهد شد. با Suspend و Resume هم می توانید Thread را متوقف و یا مجددا به حرکت بیندازید.
Thread یکی از حالت های زیر را دارد که با ThreadState قابل مشاهده است:
Thread State Description
Unstarted Thread is Created within the common language run time but not Started still.
Running After a Thread calls Start method
WaitSleepJoin After a Thread calls its wait or Sleep or Join method.
Suspended Thread Responds to a Suspend method call.
Stopped The Thread is Stopped, either normally or Aborted.
اولویت Thread نیز با ThreadPriority تعیین می شود که یکی از حالت های زیر را دارد:
Lowest, BelowNormal, Normal, AboveNormal, Highest
که در حالت عادی Normal است.
مثال های بیشتر برای MultiTreading
برنامه زیر یک برنامه ی مفید و ساده برای دریافتن مفهوم MultiThread است که به همراه خروجی برنامه آورده می شود:
using System;
using System.Threading;
class Tester
{
static void Main( )
{
// make an instance of this class
Tester t = new Tester( );
// run outside static Main
t.DoTest( );
}
public void DoTest( )
{
// create a thread for the Incrementer
// pass in a ThreadStart delegate
// with the address of Incrementer
Thread t1 = new Thread( new ThreadStart(Incrementer) );
// create a thread for the Decrementer
// pass in a ThreadStart delegate
// with the address of Decrementer
Thread t2 =
new Thread( new ThreadStart(Decrementer) );
// start the threads
t1.Start( );
t2.Start( );
}
// demo function, counts up to 1K
public void Incrementer( )
{
for (int i =0;i<1000;i++)
{
Console.WriteLine("Incrementer: {0}", i);
}
}
// demo function, counts down from 1k
public void Decrementer( )
{
for (int i = 1000;i>=0;i--)
{
Console.WriteLine("Decrementer: {0}", i);
}
}
}
Output:
Incrementer: 102
Incrementer: 103
Incrementer: 104
Incrementer: 105
Incrementer: 106
Decrementer: 1000
Decrementer: 999
Decrementer: 998
Decrementer: 997
پیوند زدن Thread ها و متوقف کردن آنها
بااستفاده از join می توانید Thread ها را به هم وصل کنید و با Seleep برای لحظاتی چند متوقف کنید. یک نمونه ی ساده در زیر آمده است :
using System;
using System.Threading;
class Tester
{
private int counter = 0;
static void Main( )
{
// make an instance of this class
Tester t = new Tester( );
// run outside static Main
t.DoTest( );
}
public void DoTest( )
{
Thread t1 = new Thread( new ThreadStart(Incrementer) );
t1.IsBackground=/.\content/fa/kb/thread/true;
t1.Name = "ThreadOne";
t1.Start( );
Console.WriteLine("Started thread {0}",
t1.Name);
Thread t2 = new Thread( new ThreadStart(Incrementer) );
t2.IsBackground=/.\content/fa/kb/thread/true;
t2.Name = "ThreadTwo";
t2.Start( );
Console.WriteLine("Started thread {0}",
t2.Name);
t1.Join( );
t2.Join( );
// after all threads end, print a message
Console.WriteLine("All my threads are done.");
}
// demo function, counts up to 1K
public void Incrementer( )
{
try
{
while (counter < 1000)
{
int temp = counter;
temp++; // increment
// simulate some work in this method
Thread.Sleep(1);
// assign the decremented value
// and display the results
counter = temp;
Console.WriteLine("Thread {0}. Incrementer: {1}",Thread.CurrentThread.Name,counter);
}
}
catch (ThreadInterruptedException)
{
Console.WriteLine("Thread {0} interrupted! Cleaning up...",Thread.CurrentThread.Name);
}
finally
{
Console.WriteLine("Thread {0} Exiting. ",Thread.CurrentThread.Name);
}
}
}
Output:
Started thread ThreadOne
Started thread ThreadTwo
Thread ThreadOne. Incrementer: 1
Thread ThreadOne. Incrementer: 2
Thread ThreadOne. Incrementer: 3
Thread ThreadTwo. Incrementer: 3
Thread ThreadTwo. Incrementer: 4
Thread ThreadOne. Incrementer: 4
Thread ThreadTwo. Incrementer: 5
Thread ThreadOne. Incrementer: 5
Thread ThreadTwo. Incrementer: 6
Thread ThreadOne. Incrementer: 6
استفاده از InterLock
یکی دیگر از امکاناتی که در اختیار دارید، امکان InterLock است که براساس آن می توانید برای برنامه های در حال اجرا Lock تعریف کنید. برای این کار C# تابعی به نام InterLock در اختیار شما قرار می دهد که شامل دو تابع Increment و Decrement است.
نمونه ی ساده ای از نحوه استفاده و خروجی تابع در زیر آمده است:
public void Incrementer( )
{
try
{
while (counter < 1000)
{
Interlocked.Increment(ref counter);
// simulate some work in this method
Thread.Sleep(1);
// assign the decremented value
// and display the results
Console.WriteLine("Thread {0}. Incrementer: {1}", Thread.CurrentThread.Name,counter);
}
}
}
Output (excerpts):
Started thread ThreadOne
Started thread ThreadTwo
Thread ThreadOne. Incrementer: 1
Thread ThreadTwo. Incrementer: 2
Thread ThreadOne. Incrementer: 3
Thread ThreadTwo. Incrementer: 4
Thread ThreadOne. Incrementer: 5
Thread ThreadTwo. Incrementer: 6
Thread ThreadOne. Incrementer: 7
Thread ThreadTwo. Incrementer: 8
Thread ThreadOne. Incrementer: 9
Thread ThreadTwo. Incrementer: 10
Thread ThreadOne. Incrementer: 11
Thread ThreadTwo. Incrementer: 12
Thread ThreadOne. Incrementer: 13
Thread ThreadTwo. Incrementer: 14
Thread ThreadOne. Incrementer: 15
Thread ThreadTwo. Incrementer: 16
Thread ThreadOne. Incrementer: 17
Thread ThreadTwo. Incrementer: 18
Thread ThreadOne. Incrementer: 19
Thread ThreadTwo. Incrementer: 20
Smartie7
09-08-2010, 07:44
با پروگرس بار هم میشه این یکی جدیده خودم اختراع کردم:31:
آره، میشه تو splash screen از progressbar هم استفاده کرد .
دیشب که اینو نوشتی من خودم درگیرش بودم :دی اومدم بگم ولی کانکشنم مشکل پیدا کرد.
اون مقاله خوب بود درباره ی thread ها ولی کم بود. :دی
innerpeace
08-08-2011, 14:09
آره، میشه تو splash screen از progressbar هم استفاده کرد .
دیشب که اینو نوشتی من خودم درگیرش بودم :دی اومدم بگم ولی کانکشنم مشکل پیدا کرد.
اون مقاله خوب بود درباره ی thread ها ولی کم بود. :دی
سلام دوست عزیز
امکانش هست که توضیح بدی چطوری از progress bar برای نشان دادن splash می شه استفاده کر؟
با تشکر [ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
vBulletin , Copyright ©2000-2025, Jelsoft Enterprises Ltd.