有没有什么方法在执行一个方法的同时执行另一个方法,当然不是在第一个方法里调用第二个方法。不知道有没有办法实现?

解决方案 »

  1.   

    定义一个委托,把那两个方法定义为参数,但在CPU运行时还是有先后的,没有真真正的同时执行!
      

  2.   

    传统上的写法是使用线程来执行两段程序,同时考虑好同步(Join)机制。我在帖子《我们写的程序真正用到多核了结构的能量了吗? 》上介绍了.net framework中新的并行计算框架。按照那个帖子的地址下载一个DLL并且引用到你的网站,就可以运行一下测试页面来测试:<%@ Page Language="C#" %><%@ Import Namespace="System.Threading" %><script runat="server">
        private Random Rnd = new Random();
        
        protected void Page_Load(object sender, EventArgs e)
        {
            Parallel.Invoke(方法1, 方法2);   //如果你有100个并行方法,也可以一直作为Invoke的参数写下去。
            方法3();    //测试结果可以看到:尽管没有任何延时,但是方法3的执行时间永远不会在方法1和方法2之前。
        }    private void 方法1()
        {
            Thread.Sleep(Rnd.Next(1000));
            this.Label1.Text = DateTime.Now.ToString("tt h:m:s.fff");
        }    private void 方法2()
        {
            Thread.Sleep(Rnd.Next(1000));
            this.Label2.Text = DateTime.Now.ToString("tt h:m:s.fff");
        }    private void 方法3()
        {
            this.Label3.Text = DateTime.Now.ToString("tt h:m:s.fff");
        }
    </script><html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>演示Paralle基本方法</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <asp:Label ID="Label1" runat="server" EnableViewState="false"></asp:Label><br />
        <asp:Label ID="Label2" runat="server" EnableViewState="false"></asp:Label><br />
        <asp:Label ID="Label3" runat="server" EnableViewState="false"></asp:Label><br />
        </form>
    </body>
    </html>
    这里,方法1和方法2是并行执行的,运行完之后才执行方法3。
      

  3.   

    最好使用观察者模式namespace WindowsApplication1
    {
        public interface Observer
        {
            void Response();  //观察者的响应,如是老鼠见到猫的反应
        }    public interface Subject
        {
            void AimAt(Observer obs); //针对哪些观察者,这里指猫的要捕捉的对象——老鼠
        }    public class Mouse : Observer
        {
            private string name;
            public Mouse(string name, Subject subj)
            {
                this.name = name;
                subj.AimAt(this);
            }
            public void Response()
            {
                MessageBox.Show(name + "马上逃跑!");
            }
        }    public class Master : Observer
        {
            public Master(Subject subj)
            {
                subj.AimAt(this);
            }
            public void Response()
            {
                MessageBox.Show("被吵醒!");
            }
        }    public class Cat : Subject
        {
            private ArrayList observers;        public Cat()
            {
                this.observers = new ArrayList();
            }
            public void AimAt(Observer obs)
            {
                this.observers.Add(obs);
            }        public void Cry()
            {
                MessageBox.Show("猫叫!");
                foreach (Observer obs in this.observers)
                {
                    obs.Response();
                }
            }
        }    public partial class Form1 : Form
        {
            public Form1()
            {
                Cat MyCat = new Cat();
                Mouse Mymouse1 = new Mouse("mouse1", MyCat);
                Mouse Mymouse2 = new Mouse("mouse2", MyCat);
                Master Mymaster = new Master(MyCat);
                MyCat.Cry();
            }
        }
    }这是一个.net的笔试题!