我正在尝试创建一个线程类。该类只是创建一个新表单的线程来打开
class Threading
{
private static int sendingForm;
public void StartThread()
{
System.Threading.Thread t = new System.Threading.Thread(new System.Threading.ThreadStart(ThreadProc));
t.SetApartmentState(System.Threading.ApartmentState.STA);
t.Start();
}
public static void ThreadProc()
{
switch (sendingForm)
{
case 1:
System.Windows.Forms.Application.Run(new MainForm());
break;
case 2:
System.Windows.Forms.Application.Run(new ReportPicker());
break;
}
}
}
这个想法很简单,我只是练习使用线程。我不想在每种形式中都这样做,所以我尝试通过在类中进行循环来回收一些代码。正如您所看到的,我检测表单的方式是根据我想要的表单发送一个数字。基于该数字将是线程运行的形式。如果有可能,我想要更好。我想的可能是一种将参数发送到我想去的形式的方法,但由于每个表单都是它自己的类型,我找不到办法。事实上,我不知道是否可以做到。所以,我在这里问你是否可以帮助我改进我的代码。如果它是通过我要求的方法无关紧要,只是为了尽可能多地回收代码。这是为了学习使用线程。感谢任何可以帮助我的人。
答案 0 :(得分:0)
使用线程时有一些黄金法则。
但是我建议你看看Task和BackgroundWorkerThread,而不是在前几次做一些自我穿线。
答案 1 :(得分:0)
好的,你想在ThreadProc中删除冗余和重复。非常好!这是一个可能的解决方案:
public static void ThreadProc<TForm>() where TForm : Form, new()
{
System.Windows.Forms.Application.Run(new TForm());
}
new System.Threading.Thread(() => ThreadProc<MainForm>())
或者,基于反思:
public static void ThreadProc(Type formType)
{
System.Windows.Forms.Application.Run((Form)Activator.CreateInstance(formType));
}
new System.Threading.Thread(() => ThreadProc(typeof(MainForm)))
或者,来电者注意:
public static void ThreadProc(Form form)
{
System.Windows.Forms.Application.Run(form);
}
new System.Threading.Thread(() => ThreadProc(new MainForm()))
请注意,调用者必须在所有情况下都要更改以采用新的调用约定。