WPF C# 调用其他CS文件类资源出错问题

对于我C#基础不好的人在学WPF时的确碰到不少问题,最近做一个上位机串口的东西,看到很多教程上都是一个xaml文件对应一个CS文件,我希望不同文件归类管理,希望主线程CS文件中的方法函数中能调用其他CS文件中的类资源对象或者方法函数,有时一不小心就搞错。现在总结下来基本是这样的。

假如我有一个主线程xaml对应的CS文件MainWindows,默认类名是MainWindow

另外一个CS文件是S,其中声明了一个类名为SPort 如下

在MainWindows.cs文件中

 
public partial class MainWindow : Window
 {
      SPort serialCom; // 初始化对象
      ///SPort serialCom = new SPort(this);///编译报错
      public MainWindow()//系统自动生成的构造函数
      {
          InitializeComponent();//系统自动生成的用于加载UI资源
      }
      private void Window_Loaded(object sender, RoutedEventArgs e) 
      {
            serialCom = new SPort(this); //对象实例化
            serialCom.Serial_Init();
      }
      private void COM_BUTTON1_Click(object sender, RoutedEventArgs e)
      {
          //SPort serialCom = new SPort(this);//局部创建无法全局应用  
            serialCom  = new SPort(this);//对象实例化
                                         //只有Sport 添加了相应的构造函数才能添加this
                                         //this作为当前窗体的实例对象传到S文件的构造函数中

            Thread thread0 = new Thread(ThreadWork0);  //创建线程函数实例
            thread0.Start();//开启线程
      }
 }

 public void ThreadWork0()  //线程函数
 {
//SPort serialCom = new SPort(this);//运行报错//在线程中创建一个带方法形参的对象运行到这会报错
            while (true)
            {
                Thread.Sleep(1000);
                serialCom.SerialReceived();
            }
 }

在S.cs文件中

public  class SPort
{
    MainWindow mainWindow = new MainWindow(); //创建主窗口对象方法
    public static SerialPort? serialPort; //串口类对象创建
    public SPort(MainWindow mainWindow)
    {
           this.mainWindow = mainWindow;  //构造函数带形参接收主文件中的窗体对象
    }                                     //这样可以操作MainWindow窗体下的UI资源

    public SPort()
    {
           serialPort = new SerialPort();//在不带形参的构造函数中创建SerialPort方法
    }                                    //这个是串口方法
}

 public void Serial_Init()
 {
     serialPort.Open();
     this.mainWindow.ComListBox.IsEnabled = true;
     //..........................
 }

从上面可以看到,注释了几个报错的地方。在窗体中或者说脱离方法函数以外创建带形参的方法对象会报错,在线程函数中创建带形参方法的对象也会报错,所以这个局部带形参方法的对象创建目前我尝试下来只能在普通方法函数中操作。

MainWindows.cs文件中 

 SPort serialCom; // 初始化S文件中SPort类的一个对象

 public MainWindow()//系统自动生成的构造函数
 {
          InitializeComponent();//系统自动生成的用于加载UI资源
 }

serialCom = new SPort(this); //方法函数中使得对象实例化

再配合S.cs文件中

MainWindow mainWindow = new MainWindow(); //创建主窗口对象方法

 public SPort(MainWindow mainWindow)
 {
           this.mainWindow = mainWindow;  //构造函数带形参接收主文件中的窗体对象
 }                                                                //这样可以操作MainWindow窗体下的UI资源

以上组合在一起使得在MainWindows.cs文件中MainWindows类中的方法函数中可以调用

S.cs文件中SPort类中方法函数对象和其他变量对象比如 

serialCom = new SPort(this); //对象实例化
serialCom.Serial_Init(); //调用S.cs文件SPort类中的Serial_Init()

同时S.cs文件中也能操控MainWindow.cs文件中关联的XAMl 中的UI控件资源比如

this.mainWindow.ComListBox.IsEnabled = true;  //ComListBox是MainWindow下拉框UI资源

另外说下S文件SPort类中的另一个构造函数

   public static SerialPort? serialPort; //串口类对象创建初始化为空

    public SPort()
    {
           serialPort = new SerialPort();
    }

这个是调用的网上安装的IO包文件 SerialPort 是个类  

using System.IO.Ports; //为串口新安装

然后再配合上面构造函数中的初始化创建串口方法的方式就可以调用串口安装文件中的资源比如

string[] coms = SerialPort.GetPortNames();  //获取串口名字

serialPort.Open();//开串口

关于串口的内容这里不在展开,以上是C#WPF中cs文件之间相互调用对方对象方法以及在构造函数方面的一些处理操作,自己感觉有点绕,没有C语言理解起来直观,先总结到这里。

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

闲羽二郎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值