PDA

مشاهده نسخه کامل : این مشکل رو چه جوری بر طرف کنم؟



softsoft
07-09-10, 11:01
سلام
چند روز پیش اومدم که کامپیوتر رو خاموش کنم . هرچی روی دکمه Turn Off کلیک کردم کامپیوتر خاموش نمیشد . حتی وقتی روی دکمه ی Restart هم کلیک می کردم هیچ اتفاقی نمی افتاد . اوش فکر کردم که شاید ویندوز دچار مشکل شده و باید ویندوز رو عوض کنم . آخه حدودا 9 ماه بود که ویندوز رو عوض نکرده بودم . و دوباره همون ویندوز رو نصب کردم . ولی بازم خاموش نمیشد یا Log Off هم نمیشد .
اما متوجه شدم که مثل اینکه مشکل از برنامه ای که درست کردم هست .!! من برای اینکه برنامه رو تست کنم گزاشته بودمش توی قسمت StartUp ویندوز . الآن که فکرمیکنم میبینیم که مشکل درست از همون موقع به وجود اومده . وقتی که از برنامه خارج میشم راحت میتونم Log Off کنم یا کار های دیگه . چرا اینطوری میشه ؟ راهی هست که بشه فهمید .
البته یه مشکلی دیگه ای هم وجود داره که شاید دلیل اتفاقاتی که گفتم همین باشه .
بعد از چند دقیقه یه پیغام میاد به شکل زیر :

Microsoft .Net Framework
------------------------------------------------------
Unhandled exception has occurred in your application. if you click
Continue, the application will ignore this error and atempt to continue. if
you click Quit, the application will close immediately.
Object reference not set to an instance of an object.
-------------------------------------------------------
Details Continue Quite
متن دکمه Details :

See the end of this message for details on invoking
just-in-time (JIT) debugging instead of this dialog box.
************** Exception Text **************
System.NullReferenceException: Object reference not set to an instance of an object.
at JvD_Sun_Calendar_4.FrmMain.lvWallPapers_SelectedIn dexChanged(Object sender, EventArgs e) in F:\Program Files\VB Source Code\VB.Net 2008\JvD Soft\JvD Sun Calendar 4.0\JvD Sun Calendar 4.0\FrmMain.vb:line 1158
at System.Windows.Forms.ListView.OnSelectedIndexChang ed(EventArgs e)
at System.Windows.Forms.ListView.WmReflectNotify(Mess age& m)
at System.Windows.Forms.ListView.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.O nMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.W ndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
************** Loaded Assemblies **************
mscorlib
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.1433 (REDBITS.050727-1400)
CodeBase: file:///C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll
----------------------------------------
JvD Sun Calendar 4.0
Assembly Version: 4.0.0.0
Win32 Version: 4.0.0.0
CodeBase: file:///F:/Program%20Files/VB%20Source%20Code/VB.Net%202008/JvD%20Soft/JvD%20Sun%20Calendar%204.0/JvD%20Sun%20Calendar%204.0/bin/Release/JvD%20Sun%20Calendar%204.0.exe
----------------------------------------
Microsoft.VisualBasic
Assembly Version: 8.0.0.0
Win32 Version: 8.0.50727.1433 (REDBITS.050727-1400)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/Microsoft.VisualBasic/8.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualBasic.dll
----------------------------------------
System
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.1433 (REDBITS.050727-1400)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Windows.Forms
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.1433 (REDBITS.050727-1400)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System.Drawing
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.1433 (REDBITS.050727-1400)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
System.Runtime.Remoting
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.1433 (REDBITS.050727-1400)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Runtime.Remoting/2.0.0.0__b77a5c561934e089/System.Runtime.Remoting.dll
----------------------------------------
System.Configuration
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.1433 (REDBITS.050727-1400)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Configuration/2.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
----------------------------------------
System.Xml
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.1433 (REDBITS.050727-1400)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Xml/2.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------
Interop.MEShamsiDate
Assembly Version: 1.0.0.0
Win32 Version: 1.0.0.0
CodeBase: file:///F:/Program%20Files/VB%20Source%20Code/VB.Net%202008/JvD%20Soft/JvD%20Sun%20Calendar%204.0/JvD%20Sun%20Calendar%204.0/bin/Release/Interop.MEShamsiDate.DLL
----------------------------------------
DevComponents.DotNetBar2
Assembly Version: 8.1.0.6
Win32 Version: 8.1.0.6
CodeBase: file:///F:/Program%20Files/VB%20Source%20Code/VB.Net%202008/JvD%20Soft/JvD%20Sun%20Calendar%204.0/JvD%20Sun%20Calendar%204.0/bin/Release/DevComponents.DotNetBar2.DLL
----------------------------------------
JvD Month Calendar
Assembly Version: 1.0.0.0
Win32 Version: 1.0.0.0
CodeBase: file:///F:/Program%20Files/VB%20Source%20Code/VB.Net%202008/JvD%20Soft/JvD%20Sun%20Calendar%204.0/JvD%20Sun%20Calendar%204.0/bin/Release/JvD%20Month%20Calendar.DLL
----------------------------------------
Microsoft.VisualBasic.PowerPacks.Vs
Assembly Version: 9.0.0.0
Win32 Version: 9.0.21022.8
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/Microsoft.VisualBasic.PowerPacks.Vs/9.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualBasic.PowerPacks.Vs.dll
----------------------------------------
Accessibility
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.1433 (REDBITS.050727-1400)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/Accessibility/2.0.0.0__b03f5f7f11d50a3a/Accessibility.dll
----------------------------------------
Interop.ShamsiDLL
Assembly Version: 1.0.0.0
Win32 Version: 1.0.0.0
CodeBase: file:///F:/Program%20Files/VB%20Source%20Code/VB.Net%202008/JvD%20Soft/JvD%20Sun%20Calendar%204.0/JvD%20Sun%20Calendar%204.0/bin/Release/Interop.ShamsiDLL.DLL
----------------------------------------
1l-fnpzs
Assembly Version: 4.0.0.0
Win32 Version: 2.0.50727.1433 (REDBITS.050727-1400)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
************** JIT Debugging **************
To enable just-in-time (JIT) debugging, the .config file for this
application or computer (machine.config) must have the
jitDebugging value set in the system.windows.forms section.
The application must also be compiled with debugging
enabled.
For example:
<configuration>
<system.windows.forms jitDebugging="true" />
</configuration>
When JIT debugging is enabled, any unhandled exception
will be sent to the JIT debugger registered on the computer
rather than be handled by this dialog box.
یه سری اطلاعات هم باتوجه به متن بالا براتون میزارم .
خط 1158 :
این کد در رویداد SelectedIndexChanged یه لیست ویو به نام lvWallPapers هست .

BtnSet.Image = System.Drawing.Image.FromFile(lvWallPapers.Focused Item.SubItems(2).Text)

ravegoat
07-09-10, 12:21
سلام!

با يه خط سورس بنده نمي تونم هيچ قضاوتي در مورد مشكل پيش اومده براي ويندوزتون بكنم. فكر نمي كنم مشكل به وجود اومده از برنامه تون باشه. البته ممكنه كه برنامه ي شما يه سري WAPI رو لود مي كنه و با اجراي يه پردازش سنگين روند اجراي فرمامين shutdown خود ويندوز رو به تاخير مي اندازه.

اما در مورد اون خطا: معمولا اين خطا زماني رخ ميده كه يه مقدار دهي null در برنامه اجرا بشه. يعني اينكه شما مي خواهيد مقدار يه شي رو به چيزي كه عملا" وجود نداره تغيير بديد.
فكر مي كنم در خط 1158 هيچ آيتي از كنترل lvWallPapers انتخاب يا focus نميشه كه مقدار اون آيتم تعيين كننده ي مسير تصوير كنترل BtnSet ّباشه.

موفق باشيد
آرمين

softsoft
08-09-10, 12:10
سلام!

با يه خط سورس بنده نمي تونم هيچ قضاوتي در مورد مشكل پيش اومده براي ويندوزتون بكنم. فكر نمي كنم مشكل به وجود اومده از برنامه تون باشه. البته ممكنه كه برنامه ي شما يه سري WAPI رو لود مي كنه و با اجراي يه پردازش سنگين روند اجراي فرمامين shutdown خود ويندوز رو به تاخير مي اندازه.

آرمين
برای اینکه مشکل خاموش شدن کامپیوتر رو بشه بر طرف کرد. میشه کاری کرد که وقتی دستور خاموش شدن داده شد به برنامه دستور End داد
تا برنامه بسته بشه . فکر کنم بهترین راه حل در حال حاضر همین باشه . آیا چنین راهی بلد هستید که هم توی ویندوز اکسپی و هم 7 جواب
بده .
به نظر شما چه جوری میتونم به این مشکل پی ببرم؟

ravegoat
09-09-10, 10:23
برای اینکه مشکل خاموش شدن کامپیوتر رو بشه بر طرف کرد. میشه کاری کرد که وقتی دستور خاموش شدن داده شد به برنامه دستور End داد
تا برنامه بسته بشه . فکر کنم بهترین راه حل در حال حاضر همین باشه . آیا چنین راهی بلد هستید که هم توی ویندوز اکسپی و هم 7 جواب
بده .
به نظر شما چه جوری میتونم به این مشکل پی ببرم؟

بله ميشه!

وقتي برنامه داره بسته ميشه رويداد FormClosing رخ ميده. سما بايد تو اين رويداد مربوط به Start Up فرمتون دستور End يا Application.Exit() و يا Application.ExitThread() رو وارد كنيد.

يه راه ديگه اينه كه مستقيم رويداد Shutting Down سيستم عامل رو كنترل كنيد. براي اين كار ابتدا مجموعه زير رو وارد كنيد:



Imports Microsoft.Win32



بعد فرمان زير رو در Public Class فرم اصلي تون قرار بديد:



Public Shared Sub OnShuttingdown(ByVal sender As Object, ByVal e As SessionEndingEventArgs)
End
End Sub



در آخر كد زير رو هرجايي كه اجرا كنيد رويداد مورد نظر تشكيل ميشه. مي تونيد تو رويداد Form_Load بذاريد:



AddHandler SystemEvents.SessionEnding, AddressOf OnShuttingdown



سورس بالا روي تمام نسخه ويندوز جواب گو هست.

براي پي بردن به مشكل بهتره اول منابع سيستم رو هرجا كه نياز نداريد Dispose كنيد. قدم بعدي اينه كه با دستور:

shutown -f -s

كه فرمان Shutdown با پارامتر Force هست سعي كنيد رايانه رو خاموش كنيد. بررسي كنيد كه اين جوري برنامه بسته ميشه. اگه برنامه بسته شد نشون دهنده ي اينه كه برنامه يه جورايي جواب FALSE رو در هنگام خاموش شدن ارسال مي كرد.

اين رو اضافه كنم كه به دلايلي ممكنه اصلا" رويداد ها رخ ندند مثلا" برنامه اي وابسته اي فرآيند shutdown رو كنسل كنه در اون صورت شما بايد اسمبلي و thread هاي كه به برنامه شما ربط دارند رو بررسي كنيد و موارد مشكوك رو ببنديد.

موفق باشيد
آرمين

softsoft
10-09-10, 11:42
بالا خره فهمیدم.
من برای اینکه وقتی روی دکمه ی Close کلیک میکنیم برنامه کلا بسته نشه از دستور زیر در رویداد FormClosing استفاده میکردم :

e.Cancel = True
به نظرتون دیگه از چه کدی میشه استفاده کرد که دیگه این مشکل پیش نیاد . البته اینم بگم میخوام طوری باشه که مثلا وقتی روی دکمه Close فرم کلیک کردم فرم پنهان بشه یا همون Hide .

ravegoat
10-09-10, 14:07
بالا خره فهمیدم.
من برای اینکه وقتی روی دکمه ی Close کلیک میکنیم برنامه کلا بسته نشه از دستور زیر در رویداد FormClosing استفاده میکردم :

e.Cancel = Trueبه نظرتون دیگه از چه کدی میشه استفاده کرد که دیگه این مشکل پیش نیاد . البته اینم بگم میخوام طوری باشه که مثلا وقتی روی دکمه Close فرم کلیک کردم فرم پنهان بشه یا همون Hide .

متوجه شدم...شما مي خواهيد وقتي كاربر فرم رو Close مي كنه پنجره پنهان بشه ولي هنگام Shutdown ويندوز اين اتفاق نيفته و برنامه بسته شه. براي اين كار كافيه تو رويداد FormClosing فرمتون از كد زير استفاده كنيد:




If e.CloseReason <> 1 Then
e.Cancel = True
Hide()
End If



موفق باشيد
آرمين