在我的C#Widows表单上,即使在退出后,我也希望使用Process对象信息,但我得到了异常"系统进程已退出,因此请求的信息不可用"。
到目前为止,我尝试将其保存为var,并用ListView项对其进行标记,但它仍然抛出相同的异常。
//ListView Parameters (omitted redundant ones)
Process currentProcess = Process.GetProcessById(Convert.ToInt32(processStringID);
newListViewItem.Tag = currentProcess;
listView.Items.Add(newListViewItem);
我更改了一个选定索引的事件,因此当用户单击ListView项时,它应该显示有关用该项标记的进程的信息,即使该进程已经退出。
private void listView_SelectedIndexChanged(object sender, EventArgs e)
{
try
{
Process processItem = (Process)listView.SelectedItems[0].Tag;
//Sample of getting process information (Error happens here)
MessageBox.Show(processItem.Name + processItem.VersionInfo);
}
catch (Exception ex)
{
throw ex;
}
}
Tldr;我需要一种保存整个Process对象的方法,这样即使进程已经退出,我也可以稍后获得它的信息。我对如何实现这一点持开放态度。请帮助我,因为以我目前对编程的理解,我无法想出任何解决方案。
将其存储在会话中,
存储数据:
Session["process"] = processItem;
从会话中提取数据:
var process = (Process)Session["process"]; // Don't forget to cast back to it's original type
数据是可用的,即使你导航到其他页面,除非你手动删除它。
更新:
由于问题一开始并不清楚。
使用静态类创建全局变量
public static class GlobalVar
{
/// <summary>
/// Global variable that is constant.
/// </summary>
public const string GlobalString = "Important Text";
/// <summary>
/// Static value protected by access routine.
/// </summary>
static int _globalValue;
/// <summary>
/// Access routine for global variable.
/// </summary>
public static int GlobalValue
{
get
{
return _globalValue;
}
set
{
_globalValue = value;
}
}
/// <summary>
/// Global static field.
/// </summary>
public static bool GlobalBoolean;
}
请参阅以下帖子:http://www.dotnetperls.com/global-variable