Applicaiton.Run(new mainForm)处报的异常,一个单元线程则不会
你的一个两个单元线程是指的线程的 System.Threading.ApartmentState 属性吗?
嗯 主线程用 [STAThread] 新建了另一个线程 设置ApartmentState属性
@木古白水: 设置ApartmentState属性为 STA,是吗?
@Launcher: en
@木古白水: 然后你在这个线程中去访问 COM 组件?
@Launcher: 嗯 实例化 然后进行一系列操作
@木古白水: 是实例化的时候就抛出异常了吗?
@Launcher: 不是 是Application.Run(new MainFORM) 报的异常
[STAThread]
static void Main()
{
try
{
string processName = "Huike.Mcs.Stock";
bool createdNew = false;
System.Threading.Mutex mutex = new System.Threading.Mutex(true, processName, out createdNew);
if(createdNew)
{
try
{
Application.Run(new MainForm());
}
catch(Exception ex)
{
MessageBox.Show(ex.ToString(),"系统提示");
}
@木古白水: 恕我眼拙,前面你告诉我你新建了一个线程,然后设置 ApartmentState 为 STA,然而你这里给出的代码我没发现有创建线程的语句,更不用说设置 ApartmentState 为 STA 了。
@Launcher: 之前那个是主线程的 这个另外一个线程
public void Initialize(string threadName)
{
if (isRun) return;
isRun = true;
thread = new Thread(new ThreadStart(ThreadMethod));
if (threadName == "电子标签作业线程")
{
thread.SetApartmentState(ApartmentState.STA);
}
thread.Name = threadName;
thread.Start();
System.Threading.Thread.Sleep(100);
LogNotifier.Log(LogType.Info, "线程",thread.Name+" 启动", "");
}
@木古白水: Initialize 在哪儿调用的?
@Launcher: MainForm的构造函数里 主单元线程里Application.Run(new MainForm()) 又创建了另一个单元线程 所以报错?
@木古白水: 你认为是在主线程中创建了另一个单元线程所以抛出异常?那么我写了段程序来证明你的说法是错误的,请自己测试这段代码:
/// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } public partial class Form1 : Form { Thread _thread; public Form1() { InitializeComponent(); Initialize("电子标签作业线程"); } public void Initialize(string threadName) { _thread = new Thread(new ThreadStart(ThreadMethod)); _thread.SetApartmentState(ApartmentState.STA); _thread.Name = threadName; _thread.Start(); } static void ThreadMethod() { System.Diagnostics.Debug.WriteLine("Sleep 10000...."); Thread.Sleep(10000); } }
@Launcher: 我只是猜测而已... 这个异常我完全无从下手
@木古白水: 虽然有很多方法来很快找到抛出异常的代码,但是我还是推荐给你一个最简单,但却最有助于提高你的分析能力的方法,那就是对代码做删减。将你的 ThreadMethod 方法写成我那样,你看看你的程序还抛出异常吗?
@Launcher: 嗯 好的 谢了