مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

imanking

عضویت از 1397/05/09

مشکل cross thread با فرم برنامه

  • سه شنبه 9 مرداد 1397
  • 10:37
تشکر میکنم

با سلام و درود 

من کد های زیر رو در پس زمینه فرم لاگین و کلاس مربوط به ان نوشته ام و میخوام هر وقت کاربر روی دکمه عبور 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;
            }

        }
    }
}

لطفا راهنمایی کنید

پاسخ های این پرسش

تعداد پاسخ ها : 0 پاسخ
در حال حاضر هیچ پاسخی ارسال نشده است
کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)