PDA

View Full Version : AccessViolationException:::..



javad_r_85
پنج شنبه 08 مهر 1389, 07:43 صبح
سلام علیکم...........::::::::..........
در پروژه ای که دارم می نویسیم کاربر باید عکسی را برای اعضا انتخاب کند ولی مشکل از اینجا ناشی می شود که وقتی دیالوگ باز می شه و کاربر عکس را انتخاب می کند برای بار دوم یا سوم که می خواد عکس را انتخاب کند باخطای زیر روبرو می شود و باید برنامه راببندد و دوباره باز کند تا درست عمل کند.
دوستان لطفا کمک کنید






System.AccessViolationException was unhandled
Message="Attempted to read or write protected memory. This is often an indication that other memory is corrupt."
Source="System.Windows.Forms"
StackTrace:
at System.Windows.Forms.UnsafeNativeMethods.IntDestro yWindow(HandleRef hWnd)
at System.Windows.Forms.UnsafeNativeMethods.DestroyWi ndow(HandleRef hWnd)
at System.Windows.Forms.NativeWindow.DestroyHandle()
at System.Windows.Forms.Control.DestroyHandle()
at System.Windows.Forms.Form.ShowDialog(IWin32Window owner)
at System.Windows.Forms.Form.ShowDialog()
at WindowsFormsApplication1.frm_Books.button1_Click(O bject sender, EventArgs e) in I:\programing\AriaLibrary\AriaLibrary\frm_Book\frm _Books.cs:line 126
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventAr gs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.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.DebuggableCallba ck(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
at System.Windows.Forms.UnsafeNativeMethods.DispatchM essageW(MSG& msg)
at System.Windows.Forms.Application.ComponentManager. System.Windows.Forms.UnsafeNativeMethods.IMsoCompo nentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
at System.Windows.Forms.Application.ThreadContext.Run MessageLoopInner(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.ThreadContext.Run MessageLoop(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.RunDialog(Form form)
at System.Windows.Forms.Form.ShowDialog(IWin32Window owner)
at System.Windows.Forms.Form.ShowDialog()
at WindowsFormsApplication1.frm_Main.button2_Click(Ob ject sender, EventArgs e) in I:\programing\AriaLibrary\AriaLibrary\frm_Main.cs: line 52
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventAr gs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.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.DebuggableCallba ck(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
at System.Windows.Forms.UnsafeNativeMethods.DispatchM essageW(MSG& msg)
at System.Windows.Forms.Application.ComponentManager. System.Windows.Forms.UnsafeNativeMethods.IMsoCompo nentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
at System.Windows.Forms.Application.ThreadContext.Run MessageLoopInner(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.ThreadContext.Run MessageLoop(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.Run(Form mainForm)
at WindowsFormsApplication1.Program.Main() in I:\programing\AriaLibrary\AriaLibrary\Program.cs:l ine 19
at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.Run UsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context( Object state)
at System.Threading.ExecutionContext.Run(ExecutionCon text executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
InnerException:

flash118
پنج شنبه 08 مهر 1389, 07:50 صبح
با سلام دوست عزیز لطفا در ارسال دقت کتید در حداقل امکان کد هاتون رو در داخل code قرار دهید لاقل بدونیم چی به چی هست و یه سئوال کاربر برای خودش عکس انتخاب میکنه یا برای کاربران؟

FastCode
پنج شنبه 08 مهر 1389, 07:58 صبح
Code؟
بدون کد چطوری میشه یه race condition رو تشخیص داد؟

javad_r_85
پنج شنبه 08 مهر 1389, 08:09 صبح
با سلام دوست عزیز لطفا در ارسال دقت کتید در حداقل امکان کد هاتون رو در داخل code قرار دهید لاقل بدونیم چی به چی هست و یه سئوال کاربر برای خودش عکس انتخاب میکنه یا برای کاربران؟

:قهقهه::قهقهه::قهقهه:بابا مگه مجبوری چیزی رو که بلد نیستی جواب بدی .سوالم کاملا واضح هست پس بهونه نیار من می خوام بدونم این خطا برای چیه و چطووری ازش جلوگیری کنم البته فکر کنم به خاطره اینه که دسترسی به این فایل به خاطر اینکه داره محافظت می شه مقدور نمی باشد ولی در واقع اینجوری نیست و فایل ها قابل دسترسی می باشند .ولی نمی دونم چرا این خطا را می ده.

محسن شامحمدی
پنج شنبه 08 مهر 1389, 10:09 صبح
لطف کنید و کد همون قسمتی که پنجره انتخاب عکس رو میارید رو بذارید.
اونطوری بهتر می شه کمک کرد.

javad_r_85
پنج شنبه 08 مهر 1389, 10:48 صبح
لطف کنید و کد همون قسمتی که پنجره انتخاب عکس رو میارید رو بذارید.
اونطوری بهتر می شه کمک کرد.


هر چند فکر نمیکنم به کد مربوط باشه ولی باشه اینم کدم




try
{
if (openFileDialog1.ShowDialog() == DialogResult.OK)//زمانی که کاربر عکسی را انتخاب کرد
{

pathpic = openFileDialog1.FileName;
pictureBox1.Image = Image.FromFile(pathpic);//عکس نمایش داده شود



}
}
catch (AccessViolationException)
{
msg.AccessViolation();//دسترسی غیر مجاز
}

gwbasic
پنج شنبه 08 مهر 1389, 11:11 صبح
هر موقع از Image.FromFile استفاده می کنی تا زمانی که Image را Dispose نکنی فایل مورد نظر Lock می شود پس احتمالا قبلا این فایل را توسط این دستور Lock کردی

javad_r_85
پنج شنبه 08 مهر 1389, 11:46 صبح
هر موقع از Image.FromFile استفاده می کنی تا زمانی که Image را Dispose نکنی فایل مورد نظر Lock می شود پس احتمالا قبلا این فایل را توسط این دستور Lock کردی

سلام .
دوست عزیز ممنون می شم راهنمایی کنید وبفرمایید از چه کدی استفاده کنم

javad_r_85
چهارشنبه 14 مهر 1389, 07:09 صبح
پس این همه مهندس اینجا چه کار می کن یکی جواب نمیده .
من دو فرم دار م و زمانی که فرم دوم را باز میکنم و عکس را انتخاب میکنم و فرم را میبندم و دوباره فرم 2 را باز می کنم این بار که میخوام عکسی انتخاب کنم با این مشکل بر می خورم .
لطفا کمک کنید چن وقته پروژم به خاطر این خطا خوابیده و یشرفتی نداشتم.
آقایون مدیرا فقط بلدن تایپیک حذف کنند و قوانین را گوشزد کنن یکی سوالم را جواب بده

FastCode
چهارشنبه 14 مهر 1389, 07:13 صبح
پس این همه مهندس اینجا چه کار می کن یکی جواب نمیده .
من دو فرم دار م و زمانی که فرم دوم را باز میکنم و عکس را انتخاب میکنم و فرم را میبندم و دوباره فرم 2 را باز می کنم این بار که میخوام عکسی انتخاب کنم با این مشکل بر می خورم .
لطفا کمک کنید چن وقته پروژم به خاطر این خطا خوابیده و یشرفتی نداشتم.
آقایون مدیرا فقط بلدن تایپیک حذف کنند و قوانین را گوشزد کنن یکی سوالم را جواب بده

شما وقتی نمیتونی کد یک button رو کامل بزاری اینجا, چه انتظاری داری؟

javad_r_85
چهارشنبه 14 مهر 1389, 07:49 صبح
آق مهندس صفحه قبل را ببینی کدش را قرار دادم و بازم دوباره قرار می دم





if (openFileDialog1.ShowDialog() == DialogResult.OK)//زمانی که کاربر عکسی را انتخاب کرد
{

pathpic = openFileDialog1.FileName;
pictureBox1.Image = Image.FromFile(pathpic);//عکس نمایش داده شود

M.YasPro
چهارشنبه 14 مهر 1389, 07:53 صبح
سلام
کدتون رو به این صورت تغییر بدید ببینید درست میشه ؟


if (openFileDialog1.ShowDialog() == DialogResult.OK)//زمانی که کاربر عکسی را انتخاب کرد

{


pathpic = openFileDialog1.FileName;
Image img=Image.FromFle(path);
Picturebox1.Image=img;
img.Dispose();

}

FastCode
چهارشنبه 14 مهر 1389, 07:55 صبح
آق مهندس صفحه قبل را ببینی کدش را قرار دادم و بازم دوباره قرار می دم





if (openFileDialog1.ShowDialog() == DialogResult.OK)//زمانی که کاربر عکسی را انتخاب کرد
{

pathpic = openFileDialog1.FileName;
pictureBox1.Image = Image.FromFile(pathpic);//عکس نمایش داده شود




این کدی که گزاشتی مشکل داره.
مشکلش اینه که قبل از set کردن Image اون رو dispose نمیکنی.

if(pictureBox1.Image != null) pictureBox1.Image.Dispose();
مشکل اصلی اینه که چرا بقیه کد رو نمیزاری؟

mmd2009
چهارشنبه 14 مهر 1389, 08:00 صبح
مشکلی از این بابت هم نباید باشه. کد صفحه قبل به درستی کار میکنه ( حداقل برای من ) . مطمئنا ایراد از ی جای دیگست( حداقل برای شما ) .