C# System.Windows.Threading

本文关键字:Threading Windows System | 更新日期: 2023-09-27 17:58:36

我正在编写一个"Minecraft"服务器管理器程序,但我不知道为什么,System.Windows.Threading不存在(Visual C#这么说),在这里:http://msdn.microsoft.com/en-us/library/vstudio/system.windows.threading.dispatcher,它说它应该存在。请帮忙!(消息框是波兰语的,因为我来自波兰,稍后我将添加多语言支持)

我的代码:

using System;
using System.IO;
using System.Windows.Forms;
using System.Diagnostics;
using System.Windows.Threading;
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        public Process server;
        private Boolean runServer()
        {
            if (!File.Exists(textBox2.Text))
            {
                MessageBox.Show("Brak określonej ścieżki dostępu! (" + textBox2.Text + ")", "Błąd", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return false;
            }
            Process process = new Process
            {
                StartInfo =
                {
                    FileName = textBox2.Text,
                    //Arguments = textBox3.Text,
                    UseShellExecute = false,
                    RedirectStandardOutput = true,
                    CreateNoWindow = false,
                }
            };
            process.OutputDataReceived += new DataReceivedEventHandler(server_outputDataReceived);
            process.ErrorDataReceived += new DataReceivedEventHandler(server_outputDataReceived);
            server = process;
            if (process.Start())
                return true;
            else
            {
                MessageBox.Show("Nie można włączyć serwera!", "Błąd", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return false;
            }
        }
        private String ReadFile(String filename, int line)
        {
            StreamReader reader = new StreamReader(filename);
            for (int i = 0; i < line; i++)
            {
                reader.ReadLine();
            }
            return reader.ReadLine();
        }
        private void ReloadOPs()
        {
            if (!File.Exists(textBox1.Text))
            {
                MessageBox.Show("Sciezka dostępu do pliku z listą graczy posiadających OP nie istnieje! (" + textBox1.Text + ")", "Błąd", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                tabControl1.SelectedTab = tabPageOptions;
                textBox1.SelectAll();
                return;
            }
            String line = ReadFile(textBox1.Text, 0);
            comboBox1.Items.Clear();
            for (int i = 1; i < File.ReadAllLines(textBox1.Text).Length; i++)
            {
                if (!String.IsNullOrWhiteSpace(ReadFile(textBox1.Text, i)))
                {
                    comboBox1.Items.Add(line);
                    line = ReadFile(textBox1.Text, i);
                }
            }
            MessageBox.Show("Lista graczy z OP, została odświeżona.");
        }
        // OPs combobox (OPs)
        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            groupBox1.Text = comboBox1.SelectedItem.ToString();
            groupBox1.Visible = true;
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            textBox1.Text = Application.StartupPath.ToString() + @"'ops.txt";
            ReloadOPs();
        }
        // Reload OPs button (OPs)
        private void button1_Click(object sender, EventArgs e)
        {
            ReloadOPs();
        }

        // Save button (Options)
        private void button4_Click(object sender, EventArgs e)
        {
        }
        private void server_outputDataReceived(object sender, DataReceivedEventArgs e)
        {
            Dispatcher.CurrentDispatcher.Invoke(DispatcherPriority.Normal, () =>
            {
                addConsoleMessage(e.Data.ToString(), true);
            });
        }
        // Run server button (Menu)
        private void button5_Click(object sender, EventArgs e)
        {
            if (!runServer())
                return;
            server.BeginOutputReadLine();
            button6.Enabled = true;
        }
        // Stop server button (Menu)
        private void button6_Click(object sender, EventArgs e)
        {
            if(!server.HasExited)
                server.Kill();
            button6.Enabled = false;
        }
        private void addConsoleMessage(String message, Boolean refresh)
        {   
            listBox1.Items.Add(message);
            if (refresh)
                listBox1.Refresh();
        }
    }
}

我的错误代码:无法将lambda表达式转换为类型"System.Delegate",因为它不是委托类型(server_outputDataReceived)

C# System.Windows.Threading

您的目标是WinForm应用程序,并试图使用WPF中的线程。

System.Windows.Threading命名空间

包含支持Windows Presentation Foundation(WPF)的类型线程系统

您应该使用:System.Threading命名空间。您还可以看到Jon Skeet 的《Windows窗体中的线程》