我刚刚开始学习c#中的线程和方法,但我遇到了一个我无法找到解决方案的问题.
我制作了一个基本的C#表单程序,通过启动一个线程并调用委托来不断更新和显示一个数字.
在Form1_load上启动新线程:
private void Form1_Load(object sender, EventArgs e)
{
t = new System.Threading.Thread(DoThisAllTheTime);
t.Start();
}
Run Code Online (Sandbox Code Playgroud)
Public void DoThisAllTheTime(不断更新数字):
public void DoThisAllTheTime()
{
while(true)
{
if (!this.IsDisposed)
{
number += 1;
MethodInvoker yolo = delegate() { label1.Text = number.ToString(); };
this.Invoke(yolo);
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在当我单击表单的X按钮时,我得到以下异常:
'System.Windows.Forms.dll中发生了'System.ObjectDisposedException'类型的未处理异常
无法更新已删除的对象'
虽然我确实检查了表格是否被处理.
编辑:我添加了catch(ObjectDisposedException ex)到修复问题的代码.工作代码:
public void DoThisAllTheTime()
{
while(true)
{
number += 1;
try {
MethodInvoker yolo = delegate() { label1.Text = number.ToString(); };
this.Invoke(yolo);
}
catch (ObjectDisposedException ex)
{
t.Abort();
}
}
}
Run Code Online (Sandbox Code Playgroud) 有没有办法从C#创建和构建.exe?(编者注:基本上是一个可以创建和编译其他.NET应用程序的.NET应用程序 - 请参阅接受的答案)
我不是在谈论获取我的项目的.exe(这是我在谷歌上可以找到的唯一的exe版本),我在谈论从我的程序中生成.exe文件.
我如何从C#创建一个可运行的.exe文件?我不知道如何和谷歌我只找到关于在哪里找到项目的.exe的问题,而我希望项目建立.exe的本身.
我用 c# 做了一个简单的 webbrowser,它不断重新加载页面,然后在页面加载时做一些事情。
但是,在第一次之后,以下函数不再触发:
public void gotourl()
{
webBrowser.Navigate("Stackoverflow.com");
}
public void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
MessageBox.Show("Page loaded succesfully."); // only fires once
// waiting for a few seconds by using a timer
gotourl();
}
Run Code Online (Sandbox Code Playgroud)
但是,我确实重新加载了页面。documentcompleted 状态不会再次触发。
有没有办法让函数在我每次导航到一个 url 时触发?
(我也试过 webBrowser.Refresh() )
编辑:我添加了令人难以置信的解决方案..