У меня есть приложение 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;
}
}
}
Обновление: трассировка стека исключений
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()
Вы делаете что-то подобное в форме "Конструктор загрузки"?
Проблема может быть в коде формы загрузки. Вы не должны закрывать или удалять форму в конструкторе.
this.Close()
!
Код, который вы опубликовали, в порядке, но если объект, исключающий исключение, происходит где-то внутри вашего класса Download, он подбрасывает стек вызовов до тех пор, пока вы его не увидите (основной метод)
Причина в том, что вы пытаетесь установить свою форму, видимую после ее размещения.
Вы можете попытаться сломать ObjectDisposed Exceptions и найти точную строку, которую она выбрасывает, вы можете сделать это в Debug → Exceptions.
Download
. Но в моей форме ApsisRunner
которая будет запускаться, если первый аргумент командной строки не является строкой, которая называется «скачать», я использую BackgroundWorker
s.