1.暂停的线程如何终止?
我的线程调用Suspend()之后,如果想要终止(程序退出)该怎么办,如果这时候调用Abort就会引发异常2.主窗体中有新建、编辑数据这两个按钮,每个按钮点击后打开一个子窗体,我想实现的是:点新建打开一个窗体(非模式窗体),然后再点新建的时候,已经打开的子窗体置于最前,并且是焦点,点编辑按钮也一样,此时最多可以打开两个窗体(一个新建按钮打开的,一个是编辑按钮打开的),并且点编辑按钮后,等子窗体的数据编辑完毕并且窗口关闭后,控制权才交给主窗体,并且能得到返回值根用ShowDialog()实现的效果一样,但是不能用ShowDialog(),因为这样,主窗体在子窗体没有关闭前,不能获取焦点。整个的意思也就是说像在网页里一样,我点编辑按钮,不管点多少下,都是打开一个窗口,只不过数据根据参数的不同而变化,并且,还可以在父窗体上再做别的事儿3.XmlDocument这个类,怎么没有异步的属性?在javascript里,有Async这个属性,然后可以实现数据的异步加载,但是不知道.net里为什么没有了,是被什么取代了吗?4.关于RegisterWaitForSingleObject的问题,我有以下这个函数private AutoResetEvent resetEvent = new AutoResetEvent(false);
private void waitOrTimerCallBack(object state,bool timeOut)
{
webSiteThread = new Thread(new ThreadStart(webSiteThreadStart));
webSiteThread.Name = "WebSiteThread";
//webSiteThread.Start();
RegisteredWaitHandle handle = ThreadPool.RegisterWaitForSingleObject(resetEvent,new WaitOrTimerCallback(waitOrTimerCallBack),null,-1,false);
         richTextBox1.Text = handle.ToString();
}
这段代码我觉得应该达到的效果是richTextBox1.Text 一直是空的,因为没有别的地方对resetEvent调用set方法,所以我觉得线程应该一直处于等待状态不会往下执行,但是结果却是,richTextBox1的Text马上输出了System.Threading.RegisteredWaitHandle这个结果高手请详细解答上边4个问题

解决方案 »

  1.   

    1。ThreadAbortException是FCL中为一个catch后还被自动抛出的Exception。在被Abort的Thread代码中catch(ThreadAbortException),增加Thread.ResetAbort()语句,CLR就不会再抛出这个意外了
    4。改了改你的代码,希望是你想要的
    class MyState{
    public RegisteredWaitHandle handle;
    }static AutoResetEvent resetEvent = new AutoResetEvent(false);Main(){
    MyState ms = new MyState();
    ms.handle = ThreadPool.RegisterWaitForSingleObject(resetEvent,new WaitOrTimerCallback(waitOrTimerCallBack),ms,-1,true);
    resetEvent.WaitOne();
    }static void waitOrTimerCallBack(object state,bool timeOut){
    ((MyState)state).handle.Unregister(resetEvent);
    }AutoResetEvent.WaitOne()等待一个signal
    RegisteredWaitHandle.Unregister()发送一个signal
      

  2.   

    不要再使用
    Thread.Suspend()和Thread.Resume();方法
    在.net 2.0种被置为过时了。