当前位置:编程学习 > C#/ASP.NET >>

请问如何将这个控制台程序移植到窗口应用

界面上有一个 执行按钮,和一个 richTextBox空间
刚接触C#一个月左右,我刚弄的时候,除了地下的Test类外都搬到了新的窗口应用类下面,然后把Test类中 main函数的内容搬到了 执行按钮所属的函数下
可是一直没反应,请问该如何解决啊??
就是要做一个简单的读者写者程序的窗口应用

using System;
using System.Threading;

public class Book
{

    private int[] pages;
    private bool aWriterWait = false;
    private int readerCount = 0;

    private object mutex = new Object(); // 控制对 readerCount 的访问
    private object db = new Object(); // 控制对 pages 的访问
    private object obj = new Object(); // 控制对 aWriterWait 的访问


    public Book(int numOfPages)
    {
        pages = new int[numOfPages];
    }

    public int NumOfPages
    {
        get
        {
            return pages.Length; //常量,无须同步
        }
    }

    public int this[int index]
    {
        get
        {
            lock (obj)
            {
                while (aWriterWait)
                {
                    Monitor.Wait(obj);
                }
            }

            lock (mutex)
            {
                // readerCount的锁
                // 检查是否为第一个读者
                readerCount++;
                if (readerCount == 1) Monitor.Enter(db);
            }

            int valueCopy = pages[index]; // 读取一个数据

            Console.WriteLine(Thread.CurrentThread.Name + " 读了 第" + (index + 1) + "页,他读到的数据是" + valueCopy);

  //        DisplayContent();

            lock (mutex)
            {
                readerCount--;
                if (readerCount <= 1)
                    Monitor.Exit(db);
            }

            return valueCopy;
        }
        set
        {
            lock (obj)
            {
                aWriterWait = true;
            }

            lock (db)
            { // 阻止其他的写者去写书
                pages[index] = value;
                Console.WriteLine(Thread.CurrentThread.Name + "把 " + value + " 写到第" + (index + 1) + "页");
 //               DisplayContent();
            }

            lock (obj)
            {
                aWriterWait = false;
                Monitor.PulseAll(obj); // 通知等待的读者
            }
        }
    }

    private void DisplayContent()
    {
        Console.WriteLine("{0,-35}", "书的内容是:");
        for (int i = 0; i < pages.Length; i++)
        {
            Console.Write("{0,-9}", pages[i]);
        }
        Console.WriteLine("\r\n");
    }
}

public class Reader
{
    private Book book;
    private Random rand;

    public Reader(Book b, Random random)
    {
        book = b;
        rand = random;
    }

    public void Read()
    {
        for (int i = 0; i < 5; i++)
        {
            int p = rand.Next(0, book.NumOfPages);
            int a = book[p];
            Thread.Sleep(rand.Next(0, 100));
        }
    }
}


public class Writer
{
    private Book book;
    private Random rand;

    public Writer(Book b, Random random)
    {
        book = b;
        rand = random;
    }

    public void Write()
    {
        for (int i = 0; i < 5; i++)
        {
            int p = rand.Next(0, book.NumOfPages);
            book[p] = rand.Next(50, 100);
            Thread.Sleep(rand.Next(0, 100));
        }
    }
}

public class Test
{
    public static void Main(string[] args)
    {
        Book book = new Book(5);
        Random random = new Random();

        string[] readerNames = { "读者A", "读者B", "读者C" };
        string[] writerNames = { "写者A", "写者B", "写者C" };

        Thread[] readerThreads = new Thread[3];
        Thread[] writerThreads = new Thread[3];

        for (int i = 0; i < 3; i++)
        {
            Reader reader = new Reader(book, random);
            readerThreads[i] = new Thread(new ThreadStart(reader.Read));
            readerThreads[i].Name = readerNames[i];

            Writer writer = new Writer(book, random);
            writerThreads[i] = new Thread(new ThreadStart(writer.Write));
            writerThreads[i].Name = writerNames[i];

        }

        for (int i = 0; i < 3; i++)
        {
            readerThreads[i].Start();
            writerThreads[i].Start();
        }
    }
} --------------------编程问答-------------------- 单独写到个类文件中,把Main 函数中的东西 转移到 个 按钮事件处理中 就ok 了  --------------------编程问答-------------------- Console的都换掉就可以了 --------------------编程问答--------------------
引用 1 楼 happyer_longlong 的回复:
单独写到个类文件中,把Main 函数中的东西 转移到 个 按钮事件处理中 就ok 了

顶 --------------------编程问答--------------------
引用 3 楼 gll062 的回复:
引用 1 楼 happyer_longlong 的回复:
单独写到个类文件中,把Main 函数中的东西 转移到 个 按钮事件处理中 就ok 了


--------------------编程问答-------------------- 复制 --------------------编程问答-------------------- 他主要问题是数据提示的显示吧
控制台不会出现UI的问题
要想UI界面不出现假死
委托处理 --------------------编程问答--------------------
引用 2 楼 wuyazhe 的回复:
Console的都换掉就可以了

没那么简单啊,按照我的做法根部调不到richTextBox控件啊... --------------------编程问答-------------------- 我调用不到RWForm类中的控件怎么办? --------------------编程问答--------------------
引用 2 楼 wuyazhe 的回复:
Console的都换掉就可以了

控件通过  RWForm rwf = new RWForm(); 可以调用到了,可是为什么在Book类里通过 rwf.rtxtShow.Text = "2222";不能进行赋值呢?
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,