با سلام و درود
من کد های زیر رو در پس زمینه فرم لاگین و کلاس مربوط به ان نوشته ام و میخوام هر وقت کاربر روی دکمه عبور btn_enter کلیک میکنه هم waitingbar شرکت تلریک و هم متد check همزمان اجرا بشن و فرم هم گیر نکنه و فریز نشه از thread و background worker هم استفاده کردم اما بهم خطای cross thread میده و مشکلش با فرمه لطفا راهنمایی کنید.
کد ها فرم برنامه :
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Threading;
namespace Tavon_Main_APPLICATION
{
public partial class LoginForm : Form
{
Tavon_Main_APPLICATION.classes.authentication au = new classes.authentication();
public LoginForm()
{
InitializeComponent();
}
private void btn_exit_Click(object sender, EventArgs e)
{
Application.Exit();
}
private void btn_Enter_Click(object sender, EventArgs e)
{
من میخوام این دو خط کد به صورت همزمان با هم اجرا بشن و وقتی متد check رو در thread یا background worker قرار میدم این مشکل پیش میاد و اون یکی کد رو چه بزارم چه نزارم توی thread فرقی نداره و فرم فریز میشه اخرش
radWaitingBar1.StartWaiting();
check();
}
private void LoginForm_Load(object sender, EventArgs e)
{
try
{
loginpic.Image = Tavon_Main_APPLICATION.Properties.Resources.worker;
txt_user.Focus();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void check()
{
try
{
string first = au.DBdate(txt_user,txt_pass);
string second = au.getdata(txt_user, txt_pass);
if (first == second)
{
this.Hide();
Program.startupmainform();
}
else if (first != second)
{
MessageBox.Show("??? ?????? ?? ??? ???? ??? ???","ERROR",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
else
{
return;
}
}
catch (Exception EX)
{
MessageBox.Show(EX.Message);
}
}
}
}
این هم کد های کلاس این فرم :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Management;
using Microsoft.Win32;
using System.Threading;
namespace Tavon_Main_APPLICATION.classes
{
class authentication
{
public authentication()
{
}
private static string GetProcessorID()
{
ManagementClass mc = new ManagementClass("win32_processor");
ManagementObjectCollection moc = mc.GetInstances();
string id = string.Empty;
foreach (ManagementObject mo in moc)
{
id = mo.Properties["processorID"].Value.ToString();
break;
}
return id;
}
private static string GetHDDserialno()
{
ManagementClass manege = new ManagementClass("Win32_LogicalDisk");
ManagementObjectCollection mcol = manege.GetInstances();
string result = string.Empty;
foreach (ManagementObject strt in mcol)
{
result += Convert.ToString(strt["VolumeSerialNumber"]);
}
return result;
}
private string ID()
{
string id = "";
id = GetProcessorID() + GetHDDserialno();
return id;
}
Tavon_Main_APPLICATION.DBdata.Tavon_EGB_MAINAPPEntities entity = new DBdata.Tavon_EGB_MAINAPPEntities();
RegistryKey key = Registry.CurrentUser.CreateSubKey("software\\tavon_user");
public string DBdate(object sender1, object sender2)
{
var s1 = (System.Windows.Forms.Control)sender1;
var s2 = (System.Windows.Forms.Control)sender2;
if (s1.Text == string.Empty)
{
System.Windows.Forms.MessageBox.Show("??? ?????? ?? ???? ????", "ERROR", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);
}
else if (s2.Text == string.Empty)
{
System.Windows.Forms.MessageBox.Show("??? ???? ?? ???? ????", "ERROR", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);
return "";
}
else
{
if (s1.Name == "txt_user" && s2.Name == "txt_pass")
{
var username = from data in entity.UPCs
where data.UserID == s1.Text
select data.UserID;
var password = from data in entity.UPCs
where data.PassID == s2.Text
select data.PassID;
string IDcode = ID();
var code = from data in entity.UPCs
where data.CODE == IDcode
select data.CODE;
key.SetValue("username", username);
string returnvalue = "DRS44" + username.FirstOrDefault() + "QAUP44" + code.FirstOrDefault() + "MRVY77" + password.FirstOrDefault() + "MRST66";
return returnvalue;
}
}
return "";
}
public String getdata(object sender1, object sender2)
{
var s1 = (System.Windows.Forms.Control)sender1;
var s2 = (System.Windows.Forms.Control)sender2;
if (s1.Text == String.Empty && s2.Text == String.Empty)
{
return "ERROR";
}
else
{
string code = ID();
string complex = "DRS44" + s1.Text + "QAUP44" + code + "MRVY77" + s2.Text + "MRST66";
return complex;
}
}
}
}
لطفا راهنمایی کنید
هیچ کاربری تا کنون از این پست تشکر نکرده است
با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)