c#with dotras - 拨号连接/断开后状态框不会自动更新

时间:2017-03-17 14:33:06

标签: c# visual-studio-2012 dotras

问候语,

  • 操作系统:Windows 7 / 64bit
  • 应用程序:Visual Studio 2012 / C#和DotRas 1.3库

我对c#或VS很新,所以请耐心等待。经过多个小时的研发,我最终在C#/ Dotras制作了一个pppoe拨号程序。该程序有3个主要按钮

  1. 在网络连接中创建/添加PPPoE Internet拨号连接,工作正常
  2. 拨号按钮,连接新创建的拨号器,工作正常
  3. 断开正常工作
  4. 我添加了StatuBox,其中的拨号事件应该出现在dotras youtube视频教程(适用于vpn,但我的项目适用于pppoe拨号器)上。

    StatusBox不更新连接/密码错误/连接等拨号事件。这是我最终感到困惑的部分。

    以下是我的代码

    // Dial Button Action
    private void button2_Click_1(object sender, EventArgs e)
    {
        using (RasDialer dialer = new RasDialer())
        {
            // I had to add below line to update statusTextBox Manualy , want to get rid of it by adding auto status update
            this.StatusTextBox.AppendText(string.Format("{0}\r\n\r\n", "Connection in progress ...", "{0}\r\n\r\n"));
            dialer.EntryName = ("pppoe2");
            string username = textBox1.Text;
            string passwd = textBox2.Text;
            // If username is empty dont connect 
            if (string.IsNullOrWhiteSpace(textBox1.Text))
            {
                this.StatusTextBox.AppendText(string.Format("{0}\r\n", "Cancelled. Cannot continue with username/password.", "{0}\r\n"));
                MessageBox.Show("Enter username.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }
    
            dialer.Credentials = new System.Net.NetworkCredential(textBox1.Text, textBox2.Text);
            dialer.PhoneBookPath = RasPhoneBook.GetPhoneBookPath(RasPhoneBookType.User);
            dialer.Timeout = 1000;
            dialer.AllowUseStoredCredentials = true;
            // start dialing, 
            dialer.Dial();
            // If dialer connects successfully update StatuTextbox
            this.StatusTextBox.AppendText(string.Format("{0}\r\n\r\n", "Connected."));
        }
    }
    
    private void rasDialer1_StateChanged(object sender, StateChangedEventArgs e)
    {
        this.StatusTextBox.AppendText(string.Format("{0}\r\n", "Status Changed"));
    }
    
    private void rasDialer1_Error(object sender, System.IO.ErrorEventArgs e)
    {
        this.StatusTextBox.AppendText(string.Format("{0}\r\n", "STATUS UPDATE TEXT XYZ"));
    }
    
    private void rasDialer1_DialCompleted(object sender, DialCompletedEventArgs e)
    {
        this.StatusTextBox.AppendText(string.Format("{0}\r\n", "STATUS UPDATE TEXT XYZ"));
    }
    

    任何帮助都会非常明显。

2 个答案:

答案 0 :(得分:0)

好的,我已设法启用状态框文本追加工作正常。

this.Invoke((MethodInvoker)delegate
{
this.StatusTextBox.AppendText(string.Format(e.State.ToString() + "\r\n"));
});
}

答案 1 :(得分:0)

根据您的使用方式,如果操作系统中的后台线程未编组回UI线程,则不会更新。与您所做的类似,可以将RasDialer上的SynchronizingObject属性设置为您的表单,并且线程同步将自动发生。