PDA

View Full Version : صدا زدن یک متد بدون هنک کردن برنامه



ho3ein.3ven
سه شنبه 20 فروردین 1392, 23:15 عصر
سلام . چطوری میشه یک متد رو صدا زد بدون اینکه برنامه هنک کنه ؟ یکی از دوستان گفتن با thread میشه . اگه ممکنه در این باره توضیح بدین.

Pis7Aller
سه شنبه 20 فروردین 1392, 23:29 عصر
باید از ابزار backgroundworker استفاده کنی زمانی که کارهات سنگینه میاد با thread های دیگه برنامه رو انجام میده اما گرافیک برنامه با thread متفاوتی پیش میره به خاطر همین برنامه دیگه هنگ نمی کنه

ho3ein.3ven
چهارشنبه 21 فروردین 1392, 00:29 صبح
لطفا نمونه بزار

Pis7Aller
چهارشنبه 21 فروردین 1392, 00:47 صبح
این یک نمونه که زمانی که حلقه داره می چرخه یک progressbar پر میشه حالا خودت می تونی این حلقه رو تا 100000000 یا حرچقدر بزرگ دوست داری تغییر بدی تا ببینی که پروژه هنگ نمی کنه .
namespace _Background worker
{
public partial class Form1 : Form
{


public Form1()
{
InitializeComponent();

}
void Form1_Shown(object sender, EventArgs e)
{
// Start the background worker

}
// On worker thread so do our thing!
void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{

// Your background task goes here
for (int i = 0; i <= 100; i++)
{
System.Threading.Thread.Sleep(100);
// Report progress to 'UI' thread
backgroundWorker1.ReportProgress(i);
// Simulate long task

}
}
// Back on the 'UI' thread so we can update the progress bar
void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
// The progress percentage is a property of e
progressBar1.Value = e.ProgressPercentage;
}

private void button1_Click(object sender, EventArgs e)
{
Shown += new EventHandler(Form1_Shown);

// To report progress from the background worker we need to set this property
backgroundWorker1.WorkerReportsProgress = true;
// This event will be raised on the worker thread when the worker starts
backgroundWorker1.DoWork += new DoWorkEventHandler(backgroundWorker1_DoWork);
// This event will be raised when we call ReportProgress
backgroundWorker1.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker1_Prog ressChanged);
backgroundWorker1.RunWorkerAsync();
}
}
}

البته توی این مثال متدی فراخانی نشده اما اصل مطلب فرغی نمی کنه .