Не удается получить доступ к удаленному объекту в методе Program.cs Main

1

У меня есть приложение WinForm с двумя разными формами. Если первым аргументом командной строки является "загрузка", появится форма Download. Я получаю ObjectDisposedException на Application.Run(new Download(args)); линия на Main методе моей программы.

static class Program
{
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main(string[] args)
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        if (args.Length > 0)
            switch (args[0])
            {
                case "download":
                    if (args.Length == 4)
                        Application.Run(new Download(args));
                    break;
                default:
                    Application.Run(new ApsisRunner(args));
                    break;
            }
    }
}

Изображение 174551

Обновление: трассировка стека исключений

   at System.Windows.Forms.Control.CreateHandle()
   at System.Windows.Forms.Form.CreateHandle()
   at System.Windows.Forms.Control.get_Handle()
   at System.Windows.Forms.Control.SetVisibleCore(Boolean value)
   at System.Windows.Forms.Form.SetVisibleCore(Boolean value)
   at System.Windows.Forms.Control.set_Visible(Boolean value)
   at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
   at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
   at System.Windows.Forms.Application.Run(Form mainForm)
   at ApsisCampaignRunner.Program.Main(String[] args) in c:\Users\pedram.mobedi\Documents\GitHub\Postbag\ApsisCampaignRunner\Program.cs:line 31
   at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
   at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
   at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
   at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.ThreadHelper.ThreadStart()
  • 0
    Говорит ли он, что такое находящийся в распоряжении объект?
  • 0
    Это может быть связано с выходом метода Main до инициализации диалога загрузки. Или Run () - это блокирующий вызов в WinForms? Родительское приложение может вызывать Dispose () для него до его появления.
Показать ещё 9 комментариев
Теги:
winforms
objectdisposedexception

2 ответа

2
Лучший ответ

Вы делаете что-то подобное в форме "Конструктор загрузки"?

Изображение 174551

Проблема может быть в коде формы загрузки. Вы не должны закрывать или удалять форму в конструкторе.

  • 0
    Да! Я использую это. this.Close() !
  • 0
    Это проблема. Вы удаляете объект при его создании ...
1

Код, который вы опубликовали, в порядке, но если объект, исключающий исключение, происходит где-то внутри вашего класса Download, он подбрасывает стек вызовов до тех пор, пока вы его не увидите (основной метод)

Причина в том, что вы пытаетесь установить свою форму, видимую после ее размещения.

Вы можете попытаться сломать ObjectDisposed Exceptions и найти точную строку, которую она выбрасывает, вы можете сделать это в Debug → Exceptions.

  • 0
    У меня пока нет фоновой ветки в моей форме Download . Но в моей форме ApsisRunner которая будет запускаться, если первый аргумент командной строки не является строкой, которая называется «скачать», я использую BackgroundWorker s.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню