Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.10.2012, 21:39   #1
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию Mетод Dispose() недоступен из-за уровня защиты

Приветствую! Не могу освободить ресурс объекта класса BinaryReader с помощью метода Dispose(). На форме две кнопки и текстовое поле. При нажатии на первую кнопку открывается диалоговое окно открытия файла. А при нажатии на вторую кнопку читается 16 разрядное слово из файла в текстовое поле формы.



Вот эта строка проблемная:
Код:
br.Dispose();
Пишет, что метод Dispose() недоступен из-за уровня защиты.

Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace _0041
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        string path;
        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();
            if (ofd.ShowDialog() == DialogResult.OK)
            {
                button2.Enabled = true;
                path = ofd.FileName;
            }
        }

        private void button2_Click_1(object sender, EventArgs e)
        {
            BinaryReader br = new BinaryReader(File.OpenRead(path));
            br.BaseStream.Position = 0x6;
            textBox1.Text = br.ReadInt16().ToString();
            br.Dispose();
        }
    }
}
Хотя на видео: ссылка У человека работает. У него VC# 2010, у меня 2008

Заранее спасибо! С уважением Иван
8Observer8 вне форума Ответить с цитированием
Старый 18.10.2012, 22:24   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Close у него вызывается.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 18.10.2012, 22:37   #3
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
Close у него вызывается.
Да, действительно! Спасибо! Непонятно всё же... почему же на видео (здесь) работает Dispose ()... Буду использовать Close! Спасибо большое!

Последний раз редактировалось 8Observer8; 18.10.2012 в 22:39.
8Observer8 вне форума Ответить с цитированием
Старый 18.10.2012, 22:41   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

у вас цель 3,5 же?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 18.10.2012, 23:04   #5
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

using используйте
eval вне форума Ответить с цитированием
Старый 19.10.2012, 09:44   #6
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
у вас цель 3,5 же?
Я сейчас SDK посмотрел. Написано, что метод Dispose поддерживается .NET Framework 3.5. Может другая причина? Или я что-то не понимаю?



Цитата:
Сообщение от eval Посмотреть сообщение
using используйте
А какой? Я же написал:
Код:
using System.IO;
8Observer8 вне форума Ответить с цитированием
Старый 19.10.2012, 09:48   #7
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

юзинги разные бывают
Код:
using (BinaryReader  br = new BinaryReader(File.OpenRead(path)))
{
            br.BaseStream.Position = 0x6;
            textBox1.Text = br.ReadInt16().ToString();
}
eval вне форума Ответить с цитированием
Старый 19.10.2012, 10:00   #8
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
юзинги разные бывают
Код:
using (BinaryReader  br = new BinaryReader(File.OpenRead(path)))
{
            br.BaseStream.Position = 0x6;
            textBox1.Text = br.ReadInt16().ToString();
}
Так тоже не работает:
Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace _0041
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        string path;
        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();
            if (ofd.ShowDialog() == DialogResult.OK)
            {
                button2.Enabled = true;
                path = ofd.FileName;
            }
        }

        private void button2_Click_1(object sender, EventArgs e)
        {
            using (BinaryReader br = new BinaryReader(File.OpenRead(path)))
            {
                br.BaseStream.Position = 0x6;
                textBox1.Text = br.ReadInt16().ToString();
                br.Dispose();
            }
        }
    }
}
Цитата:
Сообщение от eval Посмотреть сообщение
юзинги разные бывают
А не могли бы вы пояснить, когда нужно использовать тот или иной using? В чём разница? В будущем может пригодиться. Достаточно будет кратного пояснения. Спасибо!
8Observer8 вне форума Ответить с цитированием
Старый 19.10.2012, 10:03   #9
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Цитата:
Так тоже не работает:
Где вы у меня br.Dispose(); увидели?
Цитата:
А не могли бы вы пояснить, когда нужно использовать тот или иной using?
Об этом в справке расписано. http://msdn.microsoft.com/ru-ru/library/zhdeatwt.aspx
eval вне форума Ответить с цитированием
Старый 19.10.2012, 10:47   #10
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,323
По умолчанию

Проверил, что следующие два кода эквивалентны. Пробовал открывать файлы во время работы программы. Файлы открываются.



Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace _0043
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        string path;
        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();
            if (ofd.ShowDialog() == DialogResult.OK)
            {
                button2.Enabled = true;
                path = ofd.FileName;
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            BinaryWriter bw = new BinaryWriter(File.OpenWrite(path));
            bw.Write('c');
            bw.Close();
        }
    }
}
Код:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;

namespace _0043
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        string path;
        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();
            if (ofd.ShowDialog() == DialogResult.OK)
            {
                button2.Enabled = true;
                path = ofd.FileName;
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            using (BinaryWriter bw = new BinaryWriter(File.OpenWrite(path)))
            {
                bw.Write('c');
            }
        }
    }
}
Насчёт метода Dispose я так и не понял. Он же должен поддерживаеться .NET Framework 3.5, как написано в SDK.
8Observer8 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Так уж пхп недоступен Ципихович Эндрю Свободное общение 9 16.09.2012 14:00
не работает dispose MYriad Помощь студентам 1 02.10.2011 14:19
Как обозначается NEW и DISPOSE в блоксхеме??? Андрю)(@ Паскаль, Turbo Pascal, PascalABC.NET 1 08.12.2008 21:15
Почему Dispose не освобождает память? DeLorean Общие вопросы Delphi 4 08.04.2008 00:17