PDA

View Full Version : ایا باید از threadاستفاده کنم؟



negar84
پنج شنبه 25 آبان 1385, 12:51 عصر
سلام
من در برنامه ام یه حلقه while دارم که در داخل ان یه متدی فراخوانی میشه که یک فایل صوتی رو پخش می کنه . مشکلی که وجود داره اینه که قبل از اینکه فایل صوتی کامل پخش بشه حلقه ازاول اجرا می شه یعنی متد من وقت نمی کنه فایل رو به طور کامل پخش کنه من اول برای این مشکل از sleep استفاده کردم اما چون زمان پخش تمام فایل ها یکسان نیست مثلا یکیش 1 ثانیه است یکی دیگه 10 ثانیه ، استفاده از sleep مناسب نیست من بعد از گشتن توی سایت حدس زدم باید از thread استفاده کنم .. msdn را هم نگاه کردم ولی خیلی سر در نیاوردم حالا سئوال من اینه که ایا اصلا حدس من درسته و من باید از thread استفاده کنم ؟ و اگر بله می شه یه مقاله ای رو بگید تا برای من که مبتدی هستم مناسب باشه بتونم با استفاده از ان مشکلم رو حل کنم
با تشکر فراوان

roozkhosh
پنج شنبه 25 آبان 1385, 16:11 عصر
http://www.radcom.ir/kb-thread-fa.html

negar84
پنج شنبه 25 آبان 1385, 18:50 عصر
ممنون دوست خوبم
من الان تا حدودی با مفهوم thread اشنا شدم ولی هنوز هم نمی تونم مشکلم رو حل کنم ...
حالا سئوال من اینه که ایا واقعا برای حل مشکل من باید از thread استفاده کرد ؟
اگه بله چطوری ؟؟؟؟
باز هم از توجهتون متشکرم

محمد میرمصطفی
شنبه 27 آبان 1385, 13:58 عصر
System.Media.SoundPlayer a = new System.Media.SoundPlayer(@"D:\PROGRA~2\Yahoo!\MESSEN~1\Cache\naF6gLh8e9X63QFY vVA5oA--\RingTones\yodel.wav");
a.PlaySync();

negar84
شنبه 27 آبان 1385, 21:42 عصر
سلام
از توجهتون ممنون
نه دوست عزیز من با پخش فایل صوتی مشکلی ندارم مشکل من اینه که هنوز پخش یه فایل تموم نشده فایل بعدی شروع به پخش می شه به خاطر همون حلقه ای که گفتم
مشکل این جاست که اندازه فایل صوتی از قبل مشخص نیست یعنی دست کاربر ه و به همین دلیل ممکنه مثلا یه فایل 10 ثانیه باشه دیگری 1 ثانیه حالا چطور بهش بگم تا پخش یکی تموم نشده پخش دیگری را شروع نکنه !!!!

محمد میرمصطفی
شنبه 27 آبان 1385, 22:02 عصر
شما کدی رو که دادم می تونی تو یه Thread بزاری بعد به محض پایان کار، یه Eventی رو raise کنی یعنی پخش این موسیقی تموم شد. حالا تو handleکننده اون event، فایل بعدی رو تحویل thread بدی.

negar84
یک شنبه 28 آبان 1385, 11:57 صبح
سلام
متاسفانه من دقیقا متوجه نمی شم که چی کار باید انجام بدم فکر می کنم اگه کدم رو بذارم بهتر می تونید راهنماییم کنید
while (msg[i] != null)
{

lvRet = AxKDVoice1.PlayMultipleFiles(AxKDPhone1.WavePlayID , msg[i], ref lvTotalBytes);
// System.Threading.Thread.Sleep(1000);
if (lvRet != 0)
{
MessageBox.Show("Error: " + AxKDVoice1.GetErrorMsg(lvRet));
AxKDPhone1.Hangup();
return;
}

i++;
}
این قسمتی از کدمه که مشکل داره حالا می شه لطف کنید بگید که چی کار باید بکنم (البته لطفا یه جوری که منم بفهمم)
یه توضیح این که ادرس فایل صوتی که می خوام پخش شه در msg[i] ذخیره شده است
ممنون

Amir Oveisi
یک شنبه 28 آبان 1385, 12:11 عصر
خوب شما میتونین از System.Media.SoundPlayer استفاده کنین

while (msg[i] != null)
{
System.Media.SoundPlayer sp = new System.Media.SoundPlayer(msg[i]);
sp.Playsync();

}

i++;
}
اینجوری فکر نکنم مشکلی پیش بیاد

negar84
یک شنبه 28 آبان 1385, 21:53 عصر
سلام
درسته حق با شماست اگه از کدی که گفتید استفاده کنم مشکلی که من گفتم پیش نمیاد ... ولی الان یه مشکل دیگه ای وجود داره و ان اینکه من برای پخش فایل های صوتی در یک سیستم تلفن گویا از این دستورات استفاده می کردم با این دستوری که شما گفتید صوت ها از speaker پخش می شه نه از گوشی تلفن !!
برای حل این مشکل چه پیشنهادی دارید .
ممنون می شم راهنماییم کنید .
از کمک هاتونم سپاسگزارم ..
bye

negar84
یک شنبه 28 آبان 1385, 23:41 عصر
مجددا سلام
خب مشکلی که تو پست قبلی مطرح کرده بودم رو تونستم با تغییراتی توی control panle حل کنم ولی مساله اینه که روی سیستم مشتری که من همراش نیستم بگم این تغییرات رو روی windows ات نگه دار و به هیچ عنوان عوضش نکن ایا راهی هست که بدون نیاز به این تغییرات
توسط کاربر بشه همین کار رو کرد ؟
باز هم ممنون

negar84
چهارشنبه 01 آذر 1385, 20:40 عصر
سلام کسی نظری نداره این روش دوستمون برای یه سری دیگه از برنامه ها هم مشکل ایجاد می کنه ...

negar84
شنبه 04 آذر 1385, 19:54 عصر
سلام دوستان گلم
راه حل دیگه ای کسی نداره ؟ یا لااقل با این مشکلات چطور برخورد کنم !
ممنون

صابر
شنبه 04 آذر 1385, 21:08 عصر
سلام.
میشه دقیق تر بگین که چه مشکلی برای سایر برنامه ها ایجاد میشه؟

negar84
یک شنبه 05 آذر 1385, 12:46 عصر
سلام
من بعد از اینکه این تنظیمات رو انجام دادم (یعنی defult divice رو در control panle... روی مودم تنظیم کردم ) مثلا برنامه narcis دیگه فایل های صوتی اش رو پخش نمی کرد ...
یا یه مشکل دیگه همون طور که گفتم جلوگیری از تغییر تنظیمات توسط کاربر در اینده هستش که اگه راهی هم برای جلوگیری وجود داره من نمی دونم ...
باز هم توجه شما دوست عزیزم ممنون
پاینده باشید

صابر
یک شنبه 05 آذر 1385, 21:11 عصر
ببینید این به کارتون میاد؟ http://www.codeguru.com/csharp/csharp/cs_graphics/sound/article.php/c10931

میتونید با استفاده از قسمت "To change the output mixer device" در این مقاله، هنگام ورود به برنامه یا هنگام نیاز device رو عوض کنید و با استفاده از قسمت "To change the output mixer device to the default device" بعد از خروج از برنامه. یا هنگامی که نیاز ندارین device رو به حالت اولیه برگردونین.

negar84
یک شنبه 05 آذر 1385, 21:15 عصر
ممنون دوست گلم
حتما امتحانش می کنم