ممنون
اما درست نشد
ببینید من یک تابع دارم به اسم : Load
که عملیات سنگینی انجام میده
حالا میخوام همزمان با نمایش این لودینگ تابع نیز کارش رو انجام بده
توروخدا دقیق رهانماییم کنید
ضمنا من از همون دستور هم که استفاده میکنم این ارور رو میده:
fdgfgdfg.png
ببینید تابع لودتان اگر دارای متغیری است که در Form1 تعریف شده باشد مطمئناً کار نخواهد کرد.
شما برای فقط فراخوان (خواندنی)به متغیرهاتان از این تابع استفاده کنید
یک نمونه:
Form1 thisForm=LoadingForm.Waiting.formMain as Form1;
string _str = thisForm.textBox1.Text;
و برای نوشتن متغیرهاتان هم باید از فرمت ** استفاده کنید.
لطف کنید یک نمونه کوچک مثل همانی که دوستمون ساخت و مشکلشون را حل کردم ضمیمه کنید.
بفرمایید
این کد من هست که در تابع لود مینویسم و میخوام همون اول که برنامه شروع میشه اجرا بشه (یعنی در اصل باید در فرم لود نوشته بشه) :
OleDbConnection con = new OleDbConnection();
con.ConnectionString = "provider=microsoft.jet.oledb.4.0;data source=|DataDirectory|\\Words.mdb;user id=; password=;";
OleDbCommand command = new OleDbCommand();
con.Open();
command.Connection = con;
command.CommandText = "select * from fatoen";
OleDbDataReader readre = command.ExecuteReader;
if (readre.HasRows == true) {
while (readre.Read()) {
lst2.Add(readre.GetString(0));
lst1.Add(readre.GetString(1));
ListBox1.Items.Add(readre.GetString(0));
}
}
con.Close();
Label1.Text = "تعداد کلمات موجود در حافظه : " + ListBox1.Items.Count;
حالا وقتی برنامه شروع میشه،چون بانک اطلاعاتیم بیشاز 70000 رکورد داره این برنامه برای لود شدن 6 ثانیه طول میده
حالا میخوام همزمان اون فرم نشون داده بشه به کاربر
لطفا یه جوری توضیح بدید که متوجه بشم
ممنون
من منتظرم
این نوع کد نویسی Performance را پایین میآورد، چون هر بار که متد Add فراخوانی میشود UI، خود را repaint میکند.
بهتراست از BeginUpdate و EndUpdate استفاده کنید: وقتی که متد EndUpdate فراخوانی شد در نهایت تمامی آیتم ها به یکباره به کنترل اضافه میشود،
منبع:http://msdn.microsoft.com/en-us/libr...v=vs.110).aspx
ممنون
متوجه نشدم
کار این دوتا متد چیه؟
آقا واقعا ممنون
سرعت کار 10 برابر شد
متشکرم
بفرمائید این هم نحوه استفاده از کدها برای نمایش فرم انتظار
private void button6_Click(object sender, EventArgs e)
{
wt2.TextWaiting = "صبر کنید";
object objBox = wt2.CreateInForm(typeof(MainForm), this, false, false, "MyDoWork1");
//UnBoxing...
List<string[]> lstBox = objBox as List<string[]>;
foreach (string[] strList in lstBox)
{
lst2.Add(strList[0]);
lst1.Add(strList[1]);
ListBox1.Items.Add(strList[2]);
}
}
public object MyDoWork1()//این متد در یک نخ دیگر در حال اجراست
{
List<string[]> _lstBox = new List<string[]>();
OleDbConnection con = new OleDbConnection();
con.ConnectionString = "provider=microsoft.jet.oledb.4.0;data source=|DataDirectory|\\Words.mdb;user id=; password=;";
OleDbCommand command = new OleDbCommand();
con.Open();
command.Connection = con;
command.CommandText = "select * from fatoen";
OleDbDataReader readre = command.ExecuteReader;
if (readre.HasRows == true)
{
while (readre.Read())
{
string[] _strBox = new string[3];
_strBox[0] = readre.GetString(0);
_strBox[1] = readre.GetString(1);
_strBox[2] = readre.GetString(0);
//lst2.Add(readre.GetString(0));
//lst1.Add(readre.GetString(1));
//ListBox1.Items.Add(readre.GetString(0));
_lstBox.Add(_strBox);
}
}
con.Close();
return _lstBox;
}
آقا ما همچنان منتظر ورژن جدید با امکان پراگرس بار هستیم !
سلام دوستان
من از IRSKIN استفاده می کنم. تاحالا فرم رو بصورت
app.from1 form = new app.form1();
form.ShowDialog();
نمایش میدادم . اما از زمانیکه از DLL بهره میخوام ببرم این اسکین نمیاد. چه راه حلی پیشنهاد می فرمایید؟
سپاس از شما
یک فرم جدید بسازید که از فرم آیریس اسکینتان ارث بری کند:
public partial class ChildForm1 : app.from1 {
public ChildForm1()
{
InitializeComponent();
LoadingForm.Waiting.ReportCompleted();
}
}
سپس فضای نام زیر را به فرم والد تان ParrentForm اضافه کنید
//add this name space
using LoadingForm;
و برای نمایش فرمتان از این کد استفاده کنید
// In Your ParrentForm
Waiting.CreateForm(typeof(ChildForm1));
سلام دوستان خسته نباشید این برنامه وقتی یک فرم نمایش گزارش RDLC رو باهاش اجرا میکنی موقعی که میخوای گزارش نشون داده شده تو reportViewer رو چاپ کنی خطا میده 11_en19.jpg
سلام
دستور Try رو از کدها حذف کن خطاش معلوم بشه
بعدش هم به نظر من استفاده از صفحات HTML برای نمایش اطلاعات و Print راحت تر از Report Viewer هست....
Screenshot 2025-04-27 165920.jpg
میتونید از ویژگی CesLoadScreen پکیج زیر هم استفاده کنید:
https://www.nuget.org/packages/Ces.WinForm.UI/
https://github.com/CesSolutions/Ces..../CesLoadScreen
CesLoadScreen.png
این کنترل روی انواع کنترلها، فرمها و Containerها اجرا میشه.