请问如何将这个控制台程序移植到窗口应用
界面上有一个 执行按钮,和一个 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的都换掉就可以了 --------------------编程问答--------------------
顶 --------------------编程问答-------------------- 顶
--------------------编程问答-------------------- 复制 --------------------编程问答-------------------- 他主要问题是数据提示的显示吧
控制台不会出现UI的问题
要想UI界面不出现假死
委托处理 --------------------编程问答--------------------
没那么简单啊,按照我的做法根部调不到richTextBox控件啊... --------------------编程问答-------------------- 我调用不到RWForm类中的控件怎么办? --------------------编程问答--------------------
控件通过 RWForm rwf = new RWForm(); 可以调用到了,可是为什么在Book类里通过 rwf.rtxtShow.Text = "2222";不能进行赋值呢?
补充:.NET技术 , C#