هیچ محصولی در سبد خرید نیست.

ثبت‌نام

تجربه ی کار با Thread در سی شارپ

تجربه ی کار با Thread در سی شارپ

سلام. امروز داشتیم رو یه پروژه ی نرم افزار ویندوزی که با سی شارپ نوشتیم کار می کردیم برای اپدیتش؛ یه مشکلی داشتیم. مسئله اینجا بود که میخواستیم طرف ببینه اینترنتش وصله یا قطعه اگه وصل بود با رنگ سبز بنویسه مثلا “به اینترنت متصل هستید” یا “اینترنت قطع هست”. ایده ی کلی چیز ساده ای بود که خب تو ورژن قبلی با یه timer که interval ش رو روی ۳۰۰۰۰ میلی ثانیه گزاشته بودیم حل شد تقریبا. ولی چون موقع لود شدن برنامه تا سی ثانیه بعد نتیجه رو نمایش نمیداد مجبور شدیم روی رویداد Form Load فرم هم اون تابعی که برای بررسی اصال به اینترنت نوشته بودیم رو صدا بزنیم.

ولی مشکل این بود که وقتی برنامه رو باز می کردیم چون یه پینگی از یه جا می گرفت یکم طول میداد و توی اون لحظه (تقریبا ۱ الی ۲ ثانیه) من نمیتونستم کاری بکنم یعنی اون برنامه درگیره. خب برای اینکار ایده ی Background Worker رو داشتم و از قبل میدونستم که همچین چیزی هست. میشه یه Thread جدید درست کرد که تو یه حلقه با شرط Trueتا بینهایت یه کاری بکنه اما سیستم هنگ نباشه. در واقع توی بک گراند این کار رو بکنه.

توی رویداد لود فرم اصلی این کد رو گزاشتم تا یه Task به Background Worker معرفی کنم و گفتم انجامش بده.

[code] backgroundWorker1.DoWork += backgroundWorker1_DoWork; backgroundWorker1.RunWorkerAsync(); [/code]

بعد توی خود Background Worker اومدم کدهایی کی میخوام هی اجرا بشن رو نوشتم.

[code] private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { while (true) { // check inrternet connection Netchecker netchecker = new Netchecker(); if (netchecker.CheckForInternetConnection()) { netIsConnect = true; } else { netIsConnect = false; } Thread.Sleep(10000); } } [/code]

در واقع یه کلاس نوشتم که توش یه متد netchecker هست برای بررسی وصعیت اینترنت که نهایتا True و False برمیگردونه. و توی این خط ها اومدم چک کردم اگر نتیجش True بود توی یه متغیر true میریزم. بعد توی یک تایمر هر چند ثانیه فقط مقدار اون متغیرو چک می کنم و یه پیام توی یک لیبل نمایش میدم. همین.

اینطوری برنامه خیلی سریعتر شده و کار ها موازی با هم پیش میرن. این کارو خیلی جاها لازمه انجام بدیم تا برنامه کند نشه و یه سری کار ها توی بک گراند انجام بشن.

خب تجربه ی جالبی بود برام. من تخصصم سی شارپ نیست ولی برنامه نویس باید بتونه هر زبونه که نیاز داره رو یادبگیره و ازش لذت ببره و کار بقیه رو هم راه بندازه و از این طریق درامد داشته باشه.

Thread در سی شارپ

Thread در سی شارپ
اینم یه عکس که شاید از حرفای من واضح تر باشه براتون 🙂

شاد و پیروز و البته سلامت باشد.

 

 

آموزش ساخت ماشین حساب ساده با پایتون

سلام?، در این قسمت از آموزش های پروژه محور پایتون با شما هستیم تا یک ماشین حساب پایتون رو بصورت خیلی ساده پیاده سازی کنیم. اول از همه باید بدونیم این برنامه ای که می خوایم بنویسیم چه کار هایی قراره انجام بده. همونطور که از اسمش هم پیداست قراره یه سری عددو (اینجا برای سادگی فقط 2 عدد) با هم جمع، تفریق، ضرب و تقسیم کنیم. یه همین سادگی.

نکته: قراره بصورت functional کد بنویسیم. یعنی کد های هر قسمتو بصورت جداگانه بنویسیم و بعد فراخوانی کنیم. مثلا ماژول جمع زدن، تفریق و… رو می نویسیم بعد تو هسته ی اصلی برنامه فراخوانی می کنیم.

خب  چون کارمون با حساب و کتابه همون اول برنامه میایم کتابخونه ی math پایتون رو که برای محاسبات ریاضی هستش رو include می کنیم.

from math import *

بعدش یه پیام خوش آمد گویی برای استارت برنامه می نویسیم.

print ("Hello sir! welcome to Rabbit calculator...")

خب حالا نوبت به تعریف یه فانکشن برای منوی برنامه است. می خوایم لیستی از کارهایی که میشه رو بعلاوه ی operator هایی که کاربر باید بزنه تا اون کار انجام بشه رو وارد کنیم.

def options():
   print("------------------------------------------------------------------")
   print("Options: ")
   print ("------------------------------------------------------------------")
   print("Enter '+' to add two numbers")
   print("Enter '-' to subtract two numbers")
   print("Enter '*' to multiply two numbers")
   print("Enter '/' to divide two numbers")
   print("Enter '**' to power two numbers")
   print("Enter '&' to square root ")
   print("Enter 'exit' to exit the calculator")
   print("------------------------------------------------------------------")

حالا توابع جمع، ضرب و… رو می نویسیم.

#divide function
def divide():
try:
num1, num2 = float(input("Enter first number: ")), float(input("Enter second number: "))
result = num1 / num2
print("The answer: ", result,"\n")
except ZeroDivisionError:
print ("Error: division by zero is not possible!")
divide()
finally:
x = input ("wanna continue? (y/n) ")
if x == "y" or x == "Y":
divide()
else:
exit


#Add function
def add():
try:
num1,num2 = float(input("Enter first number: ")),float(input("Enter second number: "))
result = num1 + num2
print ("The answer: ",result,"\n")
except:
print ("An error ooccured!")
finally:
r = input ("wanna continue? (y/n) ")
if r == "y" or r == "Y":
add()
else:
exit
#Subtract function
def subtract():
try:
num1, num2 = float(input("Enter first number: ")), float(input("Enter second number: "))
result = num1 - num2
print("The answer: ", result,"\n")
except:
print ("An error ooccured!")
finally:
z = input ("wanna continue? (y/n) ")
if z == "y" or z == "Y":
subtract()
else:
exit

#Multiply function
def multiply():
try:
num1, num2 = float(input("Enter first number: ")), float(input("Enter second number: "))
result = num1 * num2
print("The answer: ", result,"\n")
except:
print ("An error ooccured!")
finally:
y = input ("wanna continue? (y/n) ")
if y == "y" or y == "Y":
multiply()
else:
exit

#Power function
def power():
try:
num1, num2 = float(input("Enter first number: ")), float(input("Enter second number: "))
result = num1 ** num2
print("The answer: ", result, "\n")
del (result)
except:
print ("An error ooccured!")
finally:
a = input ("wanna continue? (y/n) ")
if a == "y" or a == "Y":
power()
else:
exit
#Square root function
def square_root():
try:
num1 = float(input("Enter Your number: "))
result = sqrt(num1)
print("The answer: ",result)
except:
print ("An error ooccured!")
finally:
b = input ("wanna continue? (y/n) ")
if b == "y" or b == "Y":
square_root()
else:
exit

حالا کد های اصلی برنامه رو که توش همه ی فانکشن ها رو فراخوانی کردیمو می نویسیم:

#Base codes
while True:
options()
try:
u_in = input("Enter Your command: ")
if u_in == "exit" or u_in == "Exit" or u_in == "quit" or u_in == "Quit":
print("Good bye!\n------------------------------------------------------------------")
break
elif u_in == "+":
add()
elif u_in == "-":
subtract()
elif u_in == "*":
multiply()
elif u_in == "/":
divide()
elif u_in == "**":
power()
elif u_in == "&":
square_root()
else:
print ("check your input!\n")
except:
print ("An error ooccured!")

#Show all errors
raise

نکات:

  • while True: یعنی تا بینهایت همینجوری اجرا بشه. چون شرطش برقراره.
  • کد ها رو تو try گذاشتم تا اگه مشکلی تو اجراش پیش اومد بیام با دستور except یه متنی رو که خودم نوشتم به عنوان ارور نشون بده.
  • دستور raise میاد ارور ها رو نشون میده. (در واقع تو انگلیسی هم raise به معنای بالا آوردنه)

دوستان هرکدوم از دستورات رو که نمتوجه نشدید میتونید همین پایین کامنت بزارید.

موفق باشید

لینک ها:

#iguru_soc_icon_wrap_6381db3886113 a{ background: transparent; }#iguru_soc_icon_wrap_6381db3886113 a:hover{ background: transparent; border-color: #00bda6; }#iguru_soc_icon_wrap_6381db3886113 a{ color: #acacae; }#iguru_soc_icon_wrap_6381db3886113 a:hover{ color: #ffffff; }