PDA

View Full Version : نمايش تصوير loading هنگام اتصال به DataBase



pars.engineer
سه شنبه 11 تیر 1387, 16:24 عصر
سلام دوستان؛
در ابتداي اجراي برنامه ام چون هويت كاربر بايد بوسيله نام كاربري و كلمه عبور مشخص شود، لازم است كه فرم login به SQL Server متصل شود و چون ممكن است كه سرور در حالت Stop يا Paused باشد من از قطعه كد زير استفاده مي كنم و بدون هيچ مشكلي سرور راه اندازي مي شود.



private void btnEnter_Click(object sender, EventArgs e)

{


System.ServiceProcess.ServiceController SController = new System.ServiceProcess.ServiceController("MSSQLSERVER");
if (SController.Status ==System.ServiceProcess.ServiceControllerStatus.St opped ||
SController.Status==System.ServiceProcess.ServiceC ontrollerStatus.Paused)
SController.Start();
string strHashPassword = encryptString(txtPassword.Text);

objCommand = new SqlCommand("SELECT count(*) FROM tblLogin " +
"WHERE lgn_userName='" + txtUserName.Text + "' AND lgn_password='" + strHashPassword + "'", objConnection);
int intCorrectPass = 0;
try

{
objConnection.Open();
}

ز
catch

{


Application.Exit();
}

intCorrectPass = (int)objCommand.ExecuteScalar();
objConnection.Close();



چون وقتي كه سرور مثلا در حالت Stop قرار دارد چند ثانيه ايي زمان لازم است تا سرور به حالت Running برود من قصد دارم كه يك تصوير loading به كاربر نمايش دهم و براي اين منظور كد بالا را به صورت زير تغيير دادم ولي تصوير loading نمايش داده نمي شود.




private void btnEnter_Click(object sender, EventArgs e)

{



System.ServiceProcess.ServiceController SController = new System.ServiceProcess.ServiceController("MSSQLSERVER");

if (SController.Status ==System.ServiceProcess.ServiceControllerStatus.St opped ||
SController.Status==System.ServiceProcess.ServiceC ontrollerStatus.Paused)
}
picBoxLogin.Visible=False;
picBoxLoading.Visible=true;
SController.Start();
}

string strHashPassword = encryptString(txtPassword.Text);

objCommand = new SqlCommand("SELECT count(*) FROM tblLogin " +

"WHERE lgn_userName='" + txtUserName.Text + "' AND lgn_password='" + strHashPassword + "'", objConnection);
int intCorrectPass = 0;
try

{
objConnection.Open();
}


ز
catch


{
Application.Exit();

}

intCorrectPass = (int)objCommand.ExecuteScalar();
objConnection.Close();



احتمالا بايد از يك Thread ديگر براي نمايش عكس استفاده كنم.
ممنون مي شم اگر در اين مورد راهنمايي كنيد و حتي الامكان كد را اصلاح نماييد.

Masoud_TB
چهارشنبه 12 تیر 1387, 08:40 صبح
دوست عزیز می تونی از طریق BackgroundWorker این موضوع را حل کنی. پیشنهادم اینه که این ویدئو را نگاهی بیاندازی:
http://csharptuning.blogfa.com/post-46.aspx

pars.engineer
چهارشنبه 12 تیر 1387, 14:44 عصر
آقاي طباطبايي ممنون از راهنماييتون
ولي من باز هم جواب نگرفتم.

كد برنامه را به شكل زير تغيير دادم:




private void btnEnter_Click(object sender, EventArgs e)

{


if (SController.Status == System.ServiceProcess.ServiceControllerStatus.Stop ped ||
SController.Status == System.ServiceProcess.ServiceControllerStatus.Paus ed)
{
picBoxLogin.Visible = false;
picBoxLoading.Visible = true;
bgWorker.RunWorkerAsync();

}
string strHashPassword = encryptString(txtPassword.Text);

objCommand = new SqlCommand("SELECT count(*) FROM tblLogin " +
"WHERE lgn_userName='" + txtUserName.Text + "' AND lgn_password='" + strHashPassword + "'", objConnection);
int intCorrectPass = 0;

try

{
objConnection.Open();
}
catch

{
Application.Exit();
}

intCorrectPass = (int)objCommand.ExecuteScalar();
objConnection.Close();
}


private void bgWorker_DoWork(object sender, DoWorkEventArgs e)
{
StartServer.Start();
}


همچنين كلاس زير را با عنوان StartServer اضافه كردم:




using System;

using System.Collections.Generic;

using System.Text;

namespace Harir_Semnan
{
class StartServer

{
public static void Start()
{
System.ServiceProcess.ServiceController SController = new System.ServiceProcess.ServiceController("MSSQLSERVER");
SController.Start();
}
}
}


هنگامي كه برنامه رو خط به خط اجرا مي كنم مشكلي نيست.

hdv212
چهارشنبه 12 تیر 1387, 21:30 عصر
میتونی از delegate استفاده کنی، البته از BackgroundWorker هم میتونی استفاده کنی، نمونه کد رو برات گذاشتم (برای هردو مورد) :